Ver código fonte

Slight refactoring of Extensions to support lookup by name, added compatibility tests for text and binary formats.

csharptest 14 anos atrás
pai
commit
27bfcc5e1a
28 arquivos alterados com 13109 adições e 248 exclusões
  1. 16 1
      build/build.csproj
  2. 53 0
      protos/extest/unittest_extras_xmltest.proto
  3. 140 0
      protos/google/test/google_size.proto
  4. 140 0
      protos/google/test/google_speed.proto
  5. 1 1
      src/ProtoGen/FieldGeneratorBase.cs
  6. 22 0
      src/ProtocolBuffers.Test/CompatTests/BinaryCompatibilityTests.cs
  7. 172 0
      src/ProtocolBuffers.Test/CompatTests/CompatibilityTests.cs
  8. 77 0
      src/ProtocolBuffers.Test/CompatTests/TestResources.Designer.cs
  9. 127 0
      src/ProtocolBuffers.Test/CompatTests/TestResources.resx
  10. 60 0
      src/ProtocolBuffers.Test/CompatTests/TextCompatibilityTests.cs
  11. BIN
      src/ProtocolBuffers.Test/CompatTests/google_message1.dat
  12. BIN
      src/ProtocolBuffers.Test/CompatTests/google_message2.dat
  13. 22 0
      src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
  14. 4178 0
      src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSizeProtoFile.cs
  15. 6131 0
      src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
  16. 1680 0
      src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
  17. 2 2
      src/ProtocolBuffers.Test/TextFormatTest.cs
  18. 155 157
      src/ProtocolBuffers.sln
  19. 6 1
      src/ProtocolBuffers/ByteString.cs
  20. 1 1
      src/ProtocolBuffers/ExtensionInfo.cs
  21. 19 38
      src/ProtocolBuffers/ExtensionRegistry.cs
  22. 38 19
      src/ProtocolBuffers/ExtensionRegistryLite.cs
  23. 1 0
      src/ProtocolBuffers/FieldSet.cs
  24. 12 0
      src/ProtocolBuffers/GeneratedExtensionLite.cs
  25. 11 3
      src/ProtocolBuffers/TextFormat.cs
  26. 1 5
      src/ProtocolBuffers/WireFormat.cs
  27. 3 19
      src/ProtocolBuffers2008.sln
  28. 41 1
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs

+ 16 - 1
build/build.csproj

@@ -38,6 +38,7 @@
 
     <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)\google\protobuf\descriptor.proto" />
@@ -54,6 +55,8 @@
     <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" />
 
     <!-- Main protos -->
     <GeneratedSource Include="$(BuildTempDirectory)\CSharpOptions.cs">
@@ -68,6 +71,9 @@
       <TargetDirectory>$(SourceDirectory)\AddressBook</TargetDirectory>
     </GeneratedSource>
     <!-- Unit test -->
+    <GeneratedSource Include="$(BuildTempDirectory)\UnitTestXmlSerializerTestProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
     <GeneratedSource Include="$(BuildTempDirectory)\UnitTestCSharpOptionsProtoFile.cs">
       <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
     </GeneratedSource>
@@ -108,6 +114,9 @@
     <GeneratedSource Include="$(BuildTempDirectory)\UnitTestExtrasFullProtoFile.cs">
       <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
     </GeneratedSource>
+    <GeneratedSource Include="$(BuildTempDirectory)\UnitTestExtrasLiteProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
     <GeneratedSource Include="$(BuildTempDirectory)\UnitTestImportLiteProtoFile.cs">
       <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
     </GeneratedSource>
@@ -123,7 +132,13 @@
     <GeneratedSource Include="$(BuildTempDirectory)\UnitTestProtoFile.cs">
       <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
     </GeneratedSource>
-  
+    <GeneratedSource Include="$(BuildTempDirectory)\UnitTestGoogleSizeProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(BuildTempDirectory)\UnitTestGoogleSpeedProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+
     <TestContainer Include="$(SourceDirectory)\ProtocolBuffers.Test\bin\$(BuildConfiguration)\Google.ProtocolBuffers.Test.dll" />
     <TestContainer Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin\$(BuildConfiguration)\Google.ProtocolBuffersLite.Test.dll" />
     <TestContainer Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin\$(BuildConfiguration)\Google.ProtocolBuffersMixedLite.Test.dll" />

+ 53 - 0
protos/extest/unittest_extras_xmltest.proto

@@ -0,0 +1,53 @@
+// 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 = "UnitTestXmlSerializerTestProtoFile";
+
+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 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;
+}

+ 140 - 0
protos/google/test/google_size.proto

@@ -0,0 +1,140 @@
+package benchmarks;
+
+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;
+}

+ 140 - 0
protos/google/test/google_speed.proto

@@ -0,0 +1,140 @@
+package benchmarks;
+
+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;
+}

+ 1 - 1
src/ProtoGen/FieldGeneratorBase.cs

@@ -133,7 +133,7 @@ namespace Google.ProtocolBuffers.ProtoGen
                         }
                         if (UseLiteRuntime && Descriptor.DefaultValue is ByteString)
                         {
-                            string temp = Convert.ToBase64String(((ByteString) Descriptor.DefaultValue).ToByteArray());
+                            string temp = (((ByteString) Descriptor.DefaultValue).ToBase64());
                             return String.Format("ByteString.FromBase64(\"{0}\")", temp);
                         }
                         return string.Format("(pb::ByteString) {0}.Descriptor.Fields[{1}].DefaultValue",

+ 22 - 0
src/ProtocolBuffers.Test/CompatTests/BinaryCompatibilityTests.cs

@@ -0,0 +1,22 @@
+using System;
+using NUnit.Framework;
+
+namespace Google.ProtocolBuffers.CompatTests
+{
+    [TestFixture]
+    public class BinaryCompatibilityTests : CompatibilityTests
+    {
+        protected override string TestName { get { return "binary"; } }
+
+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
+        {
+            byte[] bresult = message.ToByteArray();
+            return bresult;
+        }
+
+        protected override TBuilder DeerializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
+        {
+            return builder.MergeFrom((byte[])message, registry);
+        }
+    }
+}

+ 172 - 0
src/ProtocolBuffers.Test/CompatTests/CompatibilityTests.cs

@@ -0,0 +1,172 @@
+using System;
+using Google.ProtocolBuffers.TestProtos;
+using NUnit.Framework;
+
+namespace Google.ProtocolBuffers.CompatTests
+{
+    public abstract class CompatibilityTests
+    {
+        protected abstract string TestName { get; }
+        protected abstract object SerializeMessage<TMessage, TBuilder>(TMessage message)
+            where TMessage : IMessageLite<TMessage, TBuilder>
+            where TBuilder : IBuilderLite<TMessage, TBuilder>;
+
+        protected abstract TBuilder DeerializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
+            where TMessage : IMessageLite<TMessage, TBuilder>
+            where TBuilder : IBuilderLite<TMessage, TBuilder>;
+
+        #region RunBenchmark
+
+        protected void RunBenchmark<TMessage, TBuilder>(byte[] buffer, bool write)
+            where TMessage : IMessageLite<TMessage, TBuilder>
+            where TBuilder : IBuilderLite<TMessage, TBuilder>, new()
+        {
+            TBuilder builder = new TBuilder();
+            TMessage message = new TBuilder().MergeFrom(buffer).Build();
+            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
+            //simple warm-up
+            object content = SerializeMessage<TMessage, TBuilder>(message);
+            Assert.AreEqual(message, DeerializeMessage<TMessage, TBuilder>(content, new TBuilder(), ExtensionRegistry.Empty).Build());
+            //timming
+            long time = 0, sample = 1;
+            while (time < 100)
+            {
+                sample *= 10;
+                watch.Reset();
+                watch.Start();
+                if (write)
+                {
+                    for (int i = 0; i < sample; i++)
+                        SerializeMessage<TMessage, TBuilder>(message);
+                }
+                else
+                {
+                    for (int i = 0; i < sample; i++)
+                        DeerializeMessage<TMessage, TBuilder>(content, builder, ExtensionRegistry.Empty);
+                }
+                watch.Stop();
+                time = watch.ElapsedMilliseconds;
+            }
+
+            ulong rounds = (ulong)((100.0 / watch.ElapsedMilliseconds) * sample);
+            //test
+            watch.Reset();
+            watch.Start();
+
+            if (write)
+            {
+                for (ulong i = 0; i < rounds; i++)
+                    SerializeMessage<TMessage, TBuilder>(message);
+            }
+            else
+            {
+                for (ulong i = 0; i < rounds; i++)
+                    DeerializeMessage<TMessage, TBuilder>(content, builder, ExtensionRegistry.Empty);
+            }
+
+            watch.Stop();
+            System.Diagnostics.Trace.TraceInformation(
+                "\r\n{0} {4} {5} {3:n0} rps ({1:n0} rounds in {2:n0} ms)", typeof(TMessage).Name, rounds,
+                watch.ElapsedMilliseconds, (1000.0 / watch.ElapsedMilliseconds) * (double)rounds, TestName, write ? " write" : " read");
+            GC.GetTotalMemory(true);
+            GC.WaitForPendingFinalizers();
+        }
+
+        [Test]
+        public virtual void Message1OptimizeSizeWriterPerf()
+        {
+            RunBenchmark<SizeMessage1, SizeMessage1.Builder>(TestResources.google_message1, true);
+        }
+        [Test]
+        public virtual void Message1OptimizeSpeedWriterPerf()
+        {
+            RunBenchmark<SpeedMessage1, SpeedMessage1.Builder>(TestResources.google_message1, true);
+        }
+        [Test]
+        public virtual void Message2OptimizeSizeWriterPerf()
+        {
+            RunBenchmark<SizeMessage2, SizeMessage2.Builder>(TestResources.google_message2, true);
+        }
+        [Test]
+        public virtual void Message2OptimizeSpeedWriterPerf()
+        {
+            RunBenchmark<SpeedMessage2, SpeedMessage2.Builder>(TestResources.google_message2, true);
+        }
+
+        [Test]
+        public virtual void Message1OptimizeSizeReadPerf()
+        {
+            RunBenchmark<SizeMessage1, SizeMessage1.Builder>(TestResources.google_message1, false);
+        }
+        [Test]
+        public virtual void Message1OptimizeSpeedReadPerf()
+        {
+            RunBenchmark<SpeedMessage1, SpeedMessage1.Builder>(TestResources.google_message1, false);
+        }
+        [Test]
+        public virtual void Message2OptimizeSizeReadPerf()
+        {
+            RunBenchmark<SizeMessage2, SizeMessage2.Builder>(TestResources.google_message2, false);
+        }
+        [Test]
+        public virtual void Message2OptimizeSpeedReadPerf()
+        {
+            RunBenchmark<SpeedMessage2, SpeedMessage2.Builder>(TestResources.google_message2, false);
+        }
+        
+        #endregion
+
+        [Test]
+        public virtual void RoundTripMessage1OptimizeSize()
+        {
+            SizeMessage1 msg = SizeMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();
+            object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);
+
+            SizeMessage1 copy = DeerializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();
+
+            Assert.AreEqual(msg, copy);
+            Assert.AreEqual(content, SerializeMessage<SizeMessage1,SizeMessage1.Builder>(copy));
+            Assert.AreEqual(TestResources.google_message1, copy.ToByteArray());
+        }
+
+        [Test]
+        public virtual void RoundTripMessage2OptimizeSize()
+        {
+            SizeMessage2 msg = SizeMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();
+            object content = SerializeMessage<SizeMessage2, SizeMessage2.Builder>(msg);
+
+            SizeMessage2 copy = DeerializeMessage<SizeMessage2, SizeMessage2.Builder>(content, SizeMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();
+
+            Assert.AreEqual(msg, copy);
+            Assert.AreEqual(content, SerializeMessage<SizeMessage2, SizeMessage2.Builder>(copy));
+            Assert.AreEqual(TestResources.google_message2, copy.ToByteArray());
+        }
+
+        [Test]
+        public virtual void RoundTripMessage1OptimizeSpeed()
+        {
+            SpeedMessage1 msg = SpeedMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();
+            object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);
+
+            SpeedMessage1 copy = DeerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();
+
+            Assert.AreEqual(msg, copy);
+            Assert.AreEqual(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));
+            Assert.AreEqual(TestResources.google_message1, copy.ToByteArray());
+        }
+
+        [Test]
+        public virtual void RoundTripMessage2OptimizeSpeed()
+        {
+            SpeedMessage2 msg = SpeedMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();
+            object content = SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(msg);
+
+            SpeedMessage2 copy = DeerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(content, SpeedMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();
+
+            Assert.AreEqual(msg, copy);
+            Assert.AreEqual(content, SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(copy));
+            Assert.AreEqual(TestResources.google_message2, copy.ToByteArray());
+        }
+
+    }
+}

+ 77 - 0
src/ProtocolBuffers.Test/CompatTests/TestResources.Designer.cs

@@ -0,0 +1,77 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.5444
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Google.ProtocolBuffers.CompatTests {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class TestResources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal TestResources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Google.ProtocolBuffers.CompatTests.TestResources", typeof(TestResources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static byte[] google_message1 {
+            get {
+                object obj = ResourceManager.GetObject("google_message1", resourceCulture);
+                return ((byte[])(obj));
+            }
+        }
+        
+        internal static byte[] google_message2 {
+            get {
+                object obj = ResourceManager.GetObject("google_message2", resourceCulture);
+                return ((byte[])(obj));
+            }
+        }
+    }
+}

+ 127 - 0
src/ProtocolBuffers.Test/CompatTests/TestResources.resx

@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="google_message1" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>google_message1.dat;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="google_message2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>google_message2.dat;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>

+ 60 - 0
src/ProtocolBuffers.Test/CompatTests/TextCompatibilityTests.cs

@@ -0,0 +1,60 @@
+using System.ComponentModel;
+using System.IO;
+using NUnit.Framework;
+
+namespace Google.ProtocolBuffers.CompatTests
+{
+    [TestFixture]
+    public class TextCompatibilityTests : CompatibilityTests
+    {
+        protected override string TestName { get { return "text"; } }
+
+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
+        {
+            StringWriter text = new StringWriter();
+            message.PrintTo(text);
+            return text.ToString();
+        }
+
+        protected override TBuilder DeerializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
+        {
+            TextFormat.Merge(new StringReader((string)message), registry, (IBuilder)builder);
+            return builder;
+        }
+
+        [Test, Explicit, Description("This test can take a very long time to run.")]
+        public override void Message2OptimizeSizeReadPerf()
+        {
+            base.Message2OptimizeSizeReadPerf();
+        }
+        [Test, Explicit, Description("This test can take a very long time to run.")]
+        public override void Message2OptimizeSpeedReadPerf()
+        {
+            base.Message2OptimizeSpeedReadPerf();
+        }
+
+        [Test, Explicit, Description("This test can take a very long time to run.")]
+        public override void RoundTripMessage2OptimizeSize()
+        {
+            base.RoundTripMessage2OptimizeSize();
+        }
+
+        [Test, Explicit, Description("This test can take a very long time to run.")]
+        public override void RoundTripMessage2OptimizeSpeed()
+        {
+            base.RoundTripMessage2OptimizeSpeed();
+        }
+
+        [Test, Explicit, Description("This test can take a very long time to run.")]
+        public override void Message2OptimizeSizeWriterPerf()
+        {
+            base.Message2OptimizeSizeWriterPerf();
+        }
+        [Test, Explicit, Description("This test can take a very long time to run.")]
+        public override void Message2OptimizeSpeedWriterPerf()
+        {
+            base.Message2OptimizeSpeedWriterPerf();
+        }
+
+    }
+}

BIN
src/ProtocolBuffers.Test/CompatTests/google_message1.dat


BIN
src/ProtocolBuffers.Test/CompatTests/google_message2.dat


+ 22 - 0
src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj

@@ -34,6 +34,7 @@
     <IsWebBootstrapper>false</IsWebBootstrapper>
     <UseApplicationTrust>false</UseApplicationTrust>
     <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TrackFileAccess>false</TrackFileAccess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -74,6 +75,14 @@
     <Compile Include="CodedInputStreamTest.cs" />
     <Compile Include="CodedOutputStreamTest.cs" />
     <Compile Include="Collections\PopsicleListTest.cs" />
+    <Compile Include="CompatTests\BinaryCompatibilityTests.cs" />
+    <Compile Include="CompatTests\CompatibilityTests.cs" />
+    <Compile Include="CompatTests\TestResources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>TestResources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="CompatTests\TextCompatibilityTests.cs" />
     <Compile Include="CSharpOptionsTest.cs" />
     <Compile Include="DescriptorsTest.cs" />
     <Compile Include="Descriptors\MessageDescriptorTest.cs" />
@@ -93,6 +102,8 @@
     <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />
     <Compile Include="TestProtos\UnitTestEmptyProtoFile.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" />
@@ -100,6 +111,7 @@
     <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="TextFormatTest.cs" />
@@ -129,6 +141,16 @@
       <Install>true</Install>
     </BootstrapperPackage>
   </ItemGroup>
+  <ItemGroup>
+    <None Include="CompatTests\google_message1.dat" />
+    <None Include="CompatTests\google_message2.dat" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="CompatTests\TestResources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>TestResources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+ 4178 - 0
src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSizeProtoFile.cs

@@ -0,0 +1,4178 @@
+// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48.  DO NOT EDIT!
+
+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()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  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_benchmarks_SizeMessage1__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1, global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Builder> internal__static_benchmarks_SizeMessage1__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage1SubMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder> internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder> internal__static_benchmarks_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(
+          "Ch1nb29nbGUvdGVzdC9nb29nbGVfc2l6ZS5wcm90bxIKYmVuY2htYXJrcxok" + 
+          "Z29vZ2xlL3Byb3RvYnVmL2NzaGFycF9vcHRpb25zLnByb3RvIvYGCgxTaXpl" + 
+          "TWVzc2FnZTESDgoGZmllbGQxGAEgAigJEg4KBmZpZWxkORgJIAEoCRIPCgdm" + 
+          "aWVsZDE4GBIgASgJEhYKB2ZpZWxkODAYUCABKAg6BWZhbHNlEhUKB2ZpZWxk" + 
+          "ODEYUSABKAg6BHRydWUSDgoGZmllbGQyGAIgAigFEg4KBmZpZWxkMxgDIAIo" + 
+          "BRIRCghmaWVsZDI4MBiYAiABKAUSEQoGZmllbGQ2GAYgASgFOgEwEg8KB2Zp" + 
+          "ZWxkMjIYFiABKAMSDgoGZmllbGQ0GAQgASgJEg4KBmZpZWxkNRgFIAMoBhIW" + 
+          "CgdmaWVsZDU5GDsgASgIOgVmYWxzZRIOCgZmaWVsZDcYByABKAkSDwoHZmll" + 
+          "bGQxNhgQIAEoBRIUCghmaWVsZDEzMBiCASABKAU6ATASFQoHZmllbGQxMhgM" + 
+          "IAEoCDoEdHJ1ZRIVCgdmaWVsZDE3GBEgASgIOgR0cnVlEhUKB2ZpZWxkMTMY" + 
+          "DSABKAg6BHRydWUSFQoHZmllbGQxNBgOIAEoCDoEdHJ1ZRITCghmaWVsZDEw" + 
+          "NBhoIAEoBToBMBITCghmaWVsZDEwMBhkIAEoBToBMBITCghmaWVsZDEwMRhl" + 
+          "IAEoBToBMBIQCghmaWVsZDEwMhhmIAEoCRIQCghmaWVsZDEwMxhnIAEoCRIS" + 
+          "CgdmaWVsZDI5GB0gASgFOgEwEhYKB2ZpZWxkMzAYHiABKAg6BWZhbHNlEhMK" + 
+          "B2ZpZWxkNjAYPCABKAU6Ai0xEhUKCGZpZWxkMjcxGI8CIAEoBToCLTESFQoI" + 
+          "ZmllbGQyNzIYkAIgASgFOgItMRIRCghmaWVsZDE1MBiWASABKAUSEgoHZmll" + 
+          "bGQyMxgXIAEoBToBMBIWCgdmaWVsZDI0GBggASgIOgVmYWxzZRISCgdmaWVs" + 
+          "ZDI1GBkgASgFOgEwEjMKB2ZpZWxkMTUYDyABKAsyIi5iZW5jaG1hcmtzLlNp" + 
+          "emVNZXNzYWdlMVN1Yk1lc3NhZ2USDwoHZmllbGQ3OBhOIAEoCBISCgdmaWVs" + 
+          "ZDY3GEMgASgFOgEwEg8KB2ZpZWxkNjgYRCABKAUSFAoIZmllbGQxMjgYgAEg" + 
+          "ASgFOgEwEigKCGZpZWxkMTI5GIEBIAEoCToVeHh4eHh4eHh4eHh4eHh4eHh4" + 
+          "eHh4EhQKCGZpZWxkMTMxGIMBIAEoBToBMCKhAwoWU2l6ZU1lc3NhZ2UxU3Vi" + 
+          "TWVzc2FnZRIRCgZmaWVsZDEYASABKAU6ATASEQoGZmllbGQyGAIgASgFOgEw" + 
+          "EhEKBmZpZWxkMxgDIAEoBToBMBIPCgdmaWVsZDE1GA8gASgJEhUKB2ZpZWxk" + 
+          "MTIYDCABKAg6BHRydWUSDwoHZmllbGQxMxgNIAEoAxIPCgdmaWVsZDE0GA4g" + 
+          "ASgDEg8KB2ZpZWxkMTYYECABKAUSEgoHZmllbGQxORgTIAEoBToBMhIVCgdm" + 
+          "aWVsZDIwGBQgASgIOgR0cnVlEhUKB2ZpZWxkMjgYHCABKAg6BHRydWUSDwoH" + 
+          "ZmllbGQyMRgVIAEoBhIPCgdmaWVsZDIyGBYgASgFEhYKB2ZpZWxkMjMYFyAB" + 
+          "KAg6BWZhbHNlEhgKCGZpZWxkMjA2GM4BIAEoCDoFZmFsc2USEQoIZmllbGQy" + 
+          "MDMYywEgASgHEhEKCGZpZWxkMjA0GMwBIAEoBRIRCghmaWVsZDIwNRjNASAB" + 
+          "KAkSEQoIZmllbGQyMDcYzwEgASgEEhEKCGZpZWxkMzAwGKwCIAEoBCLHBwoM" + 
+          "U2l6ZU1lc3NhZ2UyEg4KBmZpZWxkMRgBIAEoCRIOCgZmaWVsZDMYAyABKAMS" + 
+          "DgoGZmllbGQ0GAQgASgDEg8KB2ZpZWxkMzAYHiABKAMSFgoHZmllbGQ3NRhL" + 
+          "IAEoCDoFZmFsc2USDgoGZmllbGQ2GAYgASgJEg4KBmZpZWxkMhgCIAEoDBIS" + 
+          "CgdmaWVsZDIxGBUgASgFOgEwEg8KB2ZpZWxkNzEYRyABKAUSDwoHZmllbGQy" + 
+          "NRgZIAEoAhITCghmaWVsZDEwORhtIAEoBToBMBIUCghmaWVsZDIxMBjSASAB" + 
+          "KAU6ATASFAoIZmllbGQyMTEY0wEgASgFOgEwEhQKCGZpZWxkMjEyGNQBIAEo" + 
+          "BToBMBIUCghmaWVsZDIxMxjVASABKAU6ATASFAoIZmllbGQyMTYY2AEgASgF" + 
+          "OgEwEhQKCGZpZWxkMjE3GNkBIAEoBToBMBIUCghmaWVsZDIxOBjaASABKAU6" + 
+          "ATASFAoIZmllbGQyMjAY3AEgASgFOgEwEhQKCGZpZWxkMjIxGN0BIAEoBToB" + 
+          "MBIUCghmaWVsZDIyMhjeASABKAI6ATASDwoHZmllbGQ2Mxg/IAEoBRIvCgZn" + 
+          "cm91cDEYCiADKAoyHy5iZW5jaG1hcmtzLlNpemVNZXNzYWdlMi5Hcm91cDES" + 
+          "EQoIZmllbGQxMjgYgAEgAygJEhEKCGZpZWxkMTMxGIMBIAEoAxIQCghmaWVs" + 
+          "ZDEyNxh/IAMoCRIRCghmaWVsZDEyORiBASABKAUSEQoIZmllbGQxMzAYggEg" + 
+          "AygDEhgKCGZpZWxkMjA1GM0BIAEoCDoFZmFsc2USGAoIZmllbGQyMDYYzgEg" + 
+          "ASgIOgVmYWxzZRrCAgoGR3JvdXAxEg8KB2ZpZWxkMTEYCyACKAISDwoHZmll" + 
+          "bGQyNhgaIAEoAhIPCgdmaWVsZDEyGAwgASgJEg8KB2ZpZWxkMTMYDSABKAkS" + 
+          "DwoHZmllbGQxNBgOIAMoCRIPCgdmaWVsZDE1GA8gAigEEg4KBmZpZWxkNRgF" + 
+          "IAEoBRIPCgdmaWVsZDI3GBsgASgJEg8KB2ZpZWxkMjgYHCABKAUSDwoHZmll" + 
+          "bGQyORgdIAEoCRIPCgdmaWVsZDE2GBAgASgJEg8KB2ZpZWxkMjIYFiADKAkS" + 
+          "DwoHZmllbGQ3MxhJIAMoBRISCgdmaWVsZDIwGBQgASgFOgEwEg8KB2ZpZWxk" + 
+          "MjQYGCABKAkSNwoHZmllbGQzMRgfIAEoCzImLmJlbmNobWFya3MuU2l6ZU1l" + 
+          "c3NhZ2UyR3JvdXBlZE1lc3NhZ2Ui3gEKGlNpemVNZXNzYWdlMkdyb3VwZWRN" + 
+          "ZXNzYWdlEg4KBmZpZWxkMRgBIAEoAhIOCgZmaWVsZDIYAiABKAISEQoGZmll" + 
+          "bGQzGAMgASgCOgEwEg4KBmZpZWxkNBgEIAEoCBIOCgZmaWVsZDUYBSABKAgS" + 
+          "FAoGZmllbGQ2GAYgASgIOgR0cnVlEhUKBmZpZWxkNxgHIAEoCDoFZmFsc2US" + 
+          "DgoGZmllbGQ4GAggASgCEg4KBmZpZWxkORgJIAEoCBIPCgdmaWVsZDEwGAog" + 
+          "ASgCEg8KB2ZpZWxkMTEYCyABKANCUUIKR29vZ2xlU2l6ZUgCwj5ACiFHb29n" + 
+          "bGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MSG1VuaXRUZXN0R29vZ2xl" + 
+          "U2l6ZVByb3RvRmlsZQ==");
+      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.TestProtos.SizeMessage1, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SizeMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SizeMessage2, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.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()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SizeMessage1 : pb::GeneratedMessage<SizeMessage1, SizeMessage1.Builder> {
+    private static readonly SizeMessage1 defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SizeMessage1__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1, SizeMessage1.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.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_ = false;
+    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_ = 0;
+    public bool HasField2 {
+      get { return hasField2; }
+    }
+    public int Field2 {
+      get { return field2_; }
+    }
+    
+    public const int Field3FieldNumber = 3;
+    private bool hasField3;
+    private int field3_ = 0;
+    public bool HasField3 {
+      get { return hasField3; }
+    }
+    public int Field3 {
+      get { return field3_; }
+    }
+    
+    public const int Field280FieldNumber = 280;
+    private bool hasField280;
+    private int field280_ = 0;
+    public bool HasField280 {
+      get { return hasField280; }
+    }
+    public int Field280 {
+      get { return field280_; }
+    }
+    
+    public const int Field6FieldNumber = 6;
+    private bool hasField6;
+    private int field6_ = 0;
+    public bool HasField6 {
+      get { return hasField6; }
+    }
+    public int Field6 {
+      get { return field6_; }
+    }
+    
+    public const int Field22FieldNumber = 22;
+    private bool hasField22;
+    private long field22_ = 0L;
+    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_ = false;
+    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_ = 0;
+    public bool HasField16 {
+      get { return hasField16; }
+    }
+    public int Field16 {
+      get { return field16_; }
+    }
+    
+    public const int Field130FieldNumber = 130;
+    private bool hasField130;
+    private int field130_ = 0;
+    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_ = 0;
+    public bool HasField104 {
+      get { return hasField104; }
+    }
+    public int Field104 {
+      get { return field104_; }
+    }
+    
+    public const int Field100FieldNumber = 100;
+    private bool hasField100;
+    private int field100_ = 0;
+    public bool HasField100 {
+      get { return hasField100; }
+    }
+    public int Field100 {
+      get { return field100_; }
+    }
+    
+    public const int Field101FieldNumber = 101;
+    private bool hasField101;
+    private int field101_ = 0;
+    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_ = 0;
+    public bool HasField29 {
+      get { return hasField29; }
+    }
+    public int Field29 {
+      get { return field29_; }
+    }
+    
+    public const int Field30FieldNumber = 30;
+    private bool hasField30;
+    private bool field30_ = false;
+    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_ = 0;
+    public bool HasField150 {
+      get { return hasField150; }
+    }
+    public int Field150 {
+      get { return field150_; }
+    }
+    
+    public const int Field23FieldNumber = 23;
+    private bool hasField23;
+    private int field23_ = 0;
+    public bool HasField23 {
+      get { return hasField23; }
+    }
+    public int Field23 {
+      get { return field23_; }
+    }
+    
+    public const int Field24FieldNumber = 24;
+    private bool hasField24;
+    private bool field24_ = false;
+    public bool HasField24 {
+      get { return hasField24; }
+    }
+    public bool Field24 {
+      get { return field24_; }
+    }
+    
+    public const int Field25FieldNumber = 25;
+    private bool hasField25;
+    private int field25_ = 0;
+    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_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance;
+    public bool HasField15 {
+      get { return hasField15; }
+    }
+    public global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage Field15 {
+      get { return field15_; }
+    }
+    
+    public const int Field78FieldNumber = 78;
+    private bool hasField78;
+    private bool field78_ = false;
+    public bool HasField78 {
+      get { return hasField78; }
+    }
+    public bool Field78 {
+      get { return field78_; }
+    }
+    
+    public const int Field67FieldNumber = 67;
+    private bool hasField67;
+    private int field67_ = 0;
+    public bool HasField67 {
+      get { return hasField67; }
+    }
+    public int Field67 {
+      get { return field67_; }
+    }
+    
+    public const int Field68FieldNumber = 68;
+    private bool hasField68;
+    private int field68_ = 0;
+    public bool HasField68 {
+      get { return hasField68; }
+    }
+    public int Field68 {
+      get { return field68_; }
+    }
+    
+    public const int Field128FieldNumber = 128;
+    private bool hasField128;
+    private int field128_ = 0;
+    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_ = 0;
+    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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SizeMessage1 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SizeMessage1 result = new SizeMessage1();
+      
+      protected override SizeMessage1 MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SizeMessage1();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        result.field5_.MakeReadOnly();
+        SizeMessage1 returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      
+      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");
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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");
+        result.hasField9 = true;
+        result.field9_ = value;
+        return this;
+      }
+      public Builder ClearField9() {
+        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");
+        result.hasField18 = true;
+        result.field18_ = value;
+        return this;
+      }
+      public Builder ClearField18() {
+        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) {
+        result.hasField80 = true;
+        result.field80_ = value;
+        return this;
+      }
+      public Builder ClearField80() {
+        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) {
+        result.hasField81 = true;
+        result.field81_ = value;
+        return this;
+      }
+      public Builder ClearField81() {
+        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) {
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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) {
+        result.hasField280 = true;
+        result.field280_ = value;
+        return this;
+      }
+      public Builder ClearField280() {
+        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) {
+        result.hasField6 = true;
+        result.field6_ = value;
+        return this;
+      }
+      public Builder ClearField6() {
+        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) {
+        result.hasField22 = true;
+        result.field22_ = value;
+        return this;
+      }
+      public Builder ClearField22() {
+        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");
+        result.hasField4 = true;
+        result.field4_ = value;
+        return this;
+      }
+      public Builder ClearField4() {
+        result.hasField4 = false;
+        result.field4_ = "";
+        return this;
+      }
+      
+      [global::System.CLSCompliant(false)]
+      public pbc::IPopsicleList<ulong> Field5List {
+        get { return result.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) {
+        result.field5_[index] = value;
+        return this;
+      }
+      [global::System.CLSCompliant(false)]
+      public Builder AddField5(ulong value) {
+        result.field5_.Add(value);
+        return this;
+      }
+      [global::System.CLSCompliant(false)]
+      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {
+        base.AddRange(values, result.field5_);
+        return this;
+      }
+      public Builder ClearField5() {
+        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) {
+        result.hasField59 = true;
+        result.field59_ = value;
+        return this;
+      }
+      public Builder ClearField59() {
+        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");
+        result.hasField7 = true;
+        result.field7_ = value;
+        return this;
+      }
+      public Builder ClearField7() {
+        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) {
+        result.hasField16 = true;
+        result.field16_ = value;
+        return this;
+      }
+      public Builder ClearField16() {
+        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) {
+        result.hasField130 = true;
+        result.field130_ = value;
+        return this;
+      }
+      public Builder ClearField130() {
+        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) {
+        result.hasField12 = true;
+        result.field12_ = value;
+        return this;
+      }
+      public Builder ClearField12() {
+        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) {
+        result.hasField17 = true;
+        result.field17_ = value;
+        return this;
+      }
+      public Builder ClearField17() {
+        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) {
+        result.hasField13 = true;
+        result.field13_ = value;
+        return this;
+      }
+      public Builder ClearField13() {
+        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) {
+        result.hasField14 = true;
+        result.field14_ = value;
+        return this;
+      }
+      public Builder ClearField14() {
+        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) {
+        result.hasField104 = true;
+        result.field104_ = value;
+        return this;
+      }
+      public Builder ClearField104() {
+        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) {
+        result.hasField100 = true;
+        result.field100_ = value;
+        return this;
+      }
+      public Builder ClearField100() {
+        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) {
+        result.hasField101 = true;
+        result.field101_ = value;
+        return this;
+      }
+      public Builder ClearField101() {
+        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");
+        result.hasField102 = true;
+        result.field102_ = value;
+        return this;
+      }
+      public Builder ClearField102() {
+        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");
+        result.hasField103 = true;
+        result.field103_ = value;
+        return this;
+      }
+      public Builder ClearField103() {
+        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) {
+        result.hasField29 = true;
+        result.field29_ = value;
+        return this;
+      }
+      public Builder ClearField29() {
+        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) {
+        result.hasField30 = true;
+        result.field30_ = value;
+        return this;
+      }
+      public Builder ClearField30() {
+        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) {
+        result.hasField60 = true;
+        result.field60_ = value;
+        return this;
+      }
+      public Builder ClearField60() {
+        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) {
+        result.hasField271 = true;
+        result.field271_ = value;
+        return this;
+      }
+      public Builder ClearField271() {
+        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) {
+        result.hasField272 = true;
+        result.field272_ = value;
+        return this;
+      }
+      public Builder ClearField272() {
+        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) {
+        result.hasField150 = true;
+        result.field150_ = value;
+        return this;
+      }
+      public Builder ClearField150() {
+        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) {
+        result.hasField23 = true;
+        result.field23_ = value;
+        return this;
+      }
+      public Builder ClearField23() {
+        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) {
+        result.hasField24 = true;
+        result.field24_ = value;
+        return this;
+      }
+      public Builder ClearField24() {
+        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) {
+        result.hasField25 = true;
+        result.field25_ = value;
+        return this;
+      }
+      public Builder ClearField25() {
+        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");
+        result.hasField15 = true;
+        result.field15_ = value;
+        return this;
+      }
+      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        result.hasField15 = true;
+        result.field15_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        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() {
+        result.hasField15 = false;
+        result.field15_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance;
+        return this;
+      }
+      
+      public bool HasField78 {
+        get { return result.HasField78; }
+      }
+      public bool Field78 {
+        get { return result.Field78; }
+        set { SetField78(value); }
+      }
+      public Builder SetField78(bool value) {
+        result.hasField78 = true;
+        result.field78_ = value;
+        return this;
+      }
+      public Builder ClearField78() {
+        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) {
+        result.hasField67 = true;
+        result.field67_ = value;
+        return this;
+      }
+      public Builder ClearField67() {
+        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) {
+        result.hasField68 = true;
+        result.field68_ = value;
+        return this;
+      }
+      public Builder ClearField68() {
+        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) {
+        result.hasField128 = true;
+        result.field128_ = value;
+        return this;
+      }
+      public Builder ClearField128() {
+        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");
+        result.hasField129 = true;
+        result.field129_ = value;
+        return this;
+      }
+      public Builder ClearField129() {
+        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) {
+        result.hasField131 = true;
+        result.field131_ = value;
+        return this;
+      }
+      public Builder ClearField131() {
+        result.hasField131 = false;
+        result.field131_ = 0;
+        return this;
+      }
+    }
+    static SizeMessage1() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SizeMessage1SubMessage : pb::GeneratedMessage<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> {
+    private static readonly SizeMessage1SubMessage defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SizeMessage1SubMessage__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable; }
+    }
+    
+    public const int Field1FieldNumber = 1;
+    private bool hasField1;
+    private int field1_ = 0;
+    public bool HasField1 {
+      get { return hasField1; }
+    }
+    public int Field1 {
+      get { return field1_; }
+    }
+    
+    public const int Field2FieldNumber = 2;
+    private bool hasField2;
+    private int field2_ = 0;
+    public bool HasField2 {
+      get { return hasField2; }
+    }
+    public int Field2 {
+      get { return field2_; }
+    }
+    
+    public const int Field3FieldNumber = 3;
+    private bool hasField3;
+    private int field3_ = 0;
+    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_ = 0L;
+    public bool HasField13 {
+      get { return hasField13; }
+    }
+    public long Field13 {
+      get { return field13_; }
+    }
+    
+    public const int Field14FieldNumber = 14;
+    private bool hasField14;
+    private long field14_ = 0L;
+    public bool HasField14 {
+      get { return hasField14; }
+    }
+    public long Field14 {
+      get { return field14_; }
+    }
+    
+    public const int Field16FieldNumber = 16;
+    private bool hasField16;
+    private int field16_ = 0;
+    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_ = 0;
+    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_ = 0;
+    public bool HasField22 {
+      get { return hasField22; }
+    }
+    public int Field22 {
+      get { return field22_; }
+    }
+    
+    public const int Field23FieldNumber = 23;
+    private bool hasField23;
+    private bool field23_ = false;
+    public bool HasField23 {
+      get { return hasField23; }
+    }
+    public bool Field23 {
+      get { return field23_; }
+    }
+    
+    public const int Field206FieldNumber = 206;
+    private bool hasField206;
+    private bool field206_ = false;
+    public bool HasField206 {
+      get { return hasField206; }
+    }
+    public bool Field206 {
+      get { return field206_; }
+    }
+    
+    public const int Field203FieldNumber = 203;
+    private bool hasField203;
+    private uint field203_ = 0;
+    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_ = 0;
+    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_ = 0UL;
+    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_ = 0UL;
+    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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SizeMessage1SubMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1SubMessage, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SizeMessage1SubMessage result = new SizeMessage1SubMessage();
+      
+      protected override SizeMessage1SubMessage MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SizeMessage1SubMessage();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        SizeMessage1SubMessage returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      
+      public bool HasField1 {
+        get { return result.HasField1; }
+      }
+      public int Field1 {
+        get { return result.Field1; }
+        set { SetField1(value); }
+      }
+      public Builder SetField1(int value) {
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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) {
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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");
+        result.hasField15 = true;
+        result.field15_ = value;
+        return this;
+      }
+      public Builder ClearField15() {
+        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) {
+        result.hasField12 = true;
+        result.field12_ = value;
+        return this;
+      }
+      public Builder ClearField12() {
+        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) {
+        result.hasField13 = true;
+        result.field13_ = value;
+        return this;
+      }
+      public Builder ClearField13() {
+        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) {
+        result.hasField14 = true;
+        result.field14_ = value;
+        return this;
+      }
+      public Builder ClearField14() {
+        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) {
+        result.hasField16 = true;
+        result.field16_ = value;
+        return this;
+      }
+      public Builder ClearField16() {
+        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) {
+        result.hasField19 = true;
+        result.field19_ = value;
+        return this;
+      }
+      public Builder ClearField19() {
+        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) {
+        result.hasField20 = true;
+        result.field20_ = value;
+        return this;
+      }
+      public Builder ClearField20() {
+        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) {
+        result.hasField28 = true;
+        result.field28_ = value;
+        return this;
+      }
+      public Builder ClearField28() {
+        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) {
+        result.hasField21 = true;
+        result.field21_ = value;
+        return this;
+      }
+      public Builder ClearField21() {
+        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) {
+        result.hasField22 = true;
+        result.field22_ = value;
+        return this;
+      }
+      public Builder ClearField22() {
+        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) {
+        result.hasField23 = true;
+        result.field23_ = value;
+        return this;
+      }
+      public Builder ClearField23() {
+        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) {
+        result.hasField206 = true;
+        result.field206_ = value;
+        return this;
+      }
+      public Builder ClearField206() {
+        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) {
+        result.hasField203 = true;
+        result.field203_ = value;
+        return this;
+      }
+      public Builder ClearField203() {
+        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) {
+        result.hasField204 = true;
+        result.field204_ = value;
+        return this;
+      }
+      public Builder ClearField204() {
+        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");
+        result.hasField205 = true;
+        result.field205_ = value;
+        return this;
+      }
+      public Builder ClearField205() {
+        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) {
+        result.hasField207 = true;
+        result.field207_ = value;
+        return this;
+      }
+      public Builder ClearField207() {
+        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) {
+        result.hasField300 = true;
+        result.field300_ = value;
+        return this;
+      }
+      public Builder ClearField300() {
+        result.hasField300 = false;
+        result.field300_ = 0UL;
+        return this;
+      }
+    }
+    static SizeMessage1SubMessage() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SizeMessage2 : pb::GeneratedMessage<SizeMessage2, SizeMessage2.Builder> {
+    private static readonly SizeMessage2 defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SizeMessage2__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2, SizeMessage2.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public static class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {
+        private static readonly Group1 defaultInstance = new Builder().BuildPartial();
+        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_benchmarks_SizeMessage2_Group1__Descriptor; }
+        }
+        
+        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {
+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable; }
+        }
+        
+        public const int Field11FieldNumber = 11;
+        private bool hasField11;
+        private float field11_ = 0F;
+        public bool HasField11 {
+          get { return hasField11; }
+        }
+        public float Field11 {
+          get { return field11_; }
+        }
+        
+        public const int Field26FieldNumber = 26;
+        private bool hasField26;
+        private float field26_ = 0F;
+        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_ = 0UL;
+        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_ = 0;
+        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_ = 0;
+        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_ = 0;
+        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_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance;
+        public bool HasField31 {
+          get { return hasField31; }
+        }
+        public global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage Field31 {
+          get { return field31_; }
+        }
+        
+        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::CodedInputStream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static Group1 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        public 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 (Builder) new Builder().MergeFrom(prototype);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {
+          protected override Builder ThisBuilder {
+            get { return this; }
+          }
+          public Builder() {}
+          
+          Group1 result = new Group1();
+          
+          protected override Group1 MessageBeingBuilt {
+            get { return result; }
+          }
+          
+          public override Builder Clear() {
+            result = new Group1();
+            return this;
+          }
+          
+          public override Builder Clone() {
+            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 (result == null) {
+              throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+            }
+            result.field14_.MakeReadOnly();
+            result.field22_.MakeReadOnly();
+            result.field73_.MakeReadOnly();
+            Group1 returnMe = result;
+            result = null;
+            return returnMe;
+          }
+          
+          
+          public bool HasField11 {
+            get { return result.HasField11; }
+          }
+          public float Field11 {
+            get { return result.Field11; }
+            set { SetField11(value); }
+          }
+          public Builder SetField11(float value) {
+            result.hasField11 = true;
+            result.field11_ = value;
+            return this;
+          }
+          public Builder ClearField11() {
+            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) {
+            result.hasField26 = true;
+            result.field26_ = value;
+            return this;
+          }
+          public Builder ClearField26() {
+            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");
+            result.hasField12 = true;
+            result.field12_ = value;
+            return this;
+          }
+          public Builder ClearField12() {
+            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");
+            result.hasField13 = true;
+            result.field13_ = value;
+            return this;
+          }
+          public Builder ClearField13() {
+            result.hasField13 = false;
+            result.field13_ = "";
+            return this;
+          }
+          
+          public pbc::IPopsicleList<string> Field14List {
+            get { return result.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");
+            result.field14_[index] = value;
+            return this;
+          }
+          public Builder AddField14(string value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            result.field14_.Add(value);
+            return this;
+          }
+          public Builder AddRangeField14(scg::IEnumerable<string> values) {
+            base.AddRange(values, result.field14_);
+            return this;
+          }
+          public Builder ClearField14() {
+            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) {
+            result.hasField15 = true;
+            result.field15_ = value;
+            return this;
+          }
+          public Builder ClearField15() {
+            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) {
+            result.hasField5 = true;
+            result.field5_ = value;
+            return this;
+          }
+          public Builder ClearField5() {
+            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");
+            result.hasField27 = true;
+            result.field27_ = value;
+            return this;
+          }
+          public Builder ClearField27() {
+            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) {
+            result.hasField28 = true;
+            result.field28_ = value;
+            return this;
+          }
+          public Builder ClearField28() {
+            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");
+            result.hasField29 = true;
+            result.field29_ = value;
+            return this;
+          }
+          public Builder ClearField29() {
+            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");
+            result.hasField16 = true;
+            result.field16_ = value;
+            return this;
+          }
+          public Builder ClearField16() {
+            result.hasField16 = false;
+            result.field16_ = "";
+            return this;
+          }
+          
+          public pbc::IPopsicleList<string> Field22List {
+            get { return result.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");
+            result.field22_[index] = value;
+            return this;
+          }
+          public Builder AddField22(string value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            result.field22_.Add(value);
+            return this;
+          }
+          public Builder AddRangeField22(scg::IEnumerable<string> values) {
+            base.AddRange(values, result.field22_);
+            return this;
+          }
+          public Builder ClearField22() {
+            result.field22_.Clear();
+            return this;
+          }
+          
+          public pbc::IPopsicleList<int> Field73List {
+            get { return result.field73_; }
+          }
+          public int Field73Count {
+            get { return result.Field73Count; }
+          }
+          public int GetField73(int index) {
+            return result.GetField73(index);
+          }
+          public Builder SetField73(int index, int value) {
+            result.field73_[index] = value;
+            return this;
+          }
+          public Builder AddField73(int value) {
+            result.field73_.Add(value);
+            return this;
+          }
+          public Builder AddRangeField73(scg::IEnumerable<int> values) {
+            base.AddRange(values, result.field73_);
+            return this;
+          }
+          public Builder ClearField73() {
+            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) {
+            result.hasField20 = true;
+            result.field20_ = value;
+            return this;
+          }
+          public Builder ClearField20() {
+            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");
+            result.hasField24 = true;
+            result.field24_ = value;
+            return this;
+          }
+          public Builder ClearField24() {
+            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");
+            result.hasField31 = true;
+            result.field31_ = value;
+            return this;
+          }
+          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder builderForValue) {
+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+            result.hasField31 = true;
+            result.field31_ = builderForValue.Build();
+            return this;
+          }
+          public Builder MergeField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            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() {
+            result.hasField31 = false;
+            result.field31_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance;
+            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_ = 0L;
+    public bool HasField3 {
+      get { return hasField3; }
+    }
+    public long Field3 {
+      get { return field3_; }
+    }
+    
+    public const int Field4FieldNumber = 4;
+    private bool hasField4;
+    private long field4_ = 0L;
+    public bool HasField4 {
+      get { return hasField4; }
+    }
+    public long Field4 {
+      get { return field4_; }
+    }
+    
+    public const int Field30FieldNumber = 30;
+    private bool hasField30;
+    private long field30_ = 0L;
+    public bool HasField30 {
+      get { return hasField30; }
+    }
+    public long Field30 {
+      get { return field30_; }
+    }
+    
+    public const int Field75FieldNumber = 75;
+    private bool hasField75;
+    private bool field75_ = false;
+    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_ = 0;
+    public bool HasField21 {
+      get { return hasField21; }
+    }
+    public int Field21 {
+      get { return field21_; }
+    }
+    
+    public const int Field71FieldNumber = 71;
+    private bool hasField71;
+    private int field71_ = 0;
+    public bool HasField71 {
+      get { return hasField71; }
+    }
+    public int Field71 {
+      get { return field71_; }
+    }
+    
+    public const int Field25FieldNumber = 25;
+    private bool hasField25;
+    private float field25_ = 0F;
+    public bool HasField25 {
+      get { return hasField25; }
+    }
+    public float Field25 {
+      get { return field25_; }
+    }
+    
+    public const int Field109FieldNumber = 109;
+    private bool hasField109;
+    private int field109_ = 0;
+    public bool HasField109 {
+      get { return hasField109; }
+    }
+    public int Field109 {
+      get { return field109_; }
+    }
+    
+    public const int Field210FieldNumber = 210;
+    private bool hasField210;
+    private int field210_ = 0;
+    public bool HasField210 {
+      get { return hasField210; }
+    }
+    public int Field210 {
+      get { return field210_; }
+    }
+    
+    public const int Field211FieldNumber = 211;
+    private bool hasField211;
+    private int field211_ = 0;
+    public bool HasField211 {
+      get { return hasField211; }
+    }
+    public int Field211 {
+      get { return field211_; }
+    }
+    
+    public const int Field212FieldNumber = 212;
+    private bool hasField212;
+    private int field212_ = 0;
+    public bool HasField212 {
+      get { return hasField212; }
+    }
+    public int Field212 {
+      get { return field212_; }
+    }
+    
+    public const int Field213FieldNumber = 213;
+    private bool hasField213;
+    private int field213_ = 0;
+    public bool HasField213 {
+      get { return hasField213; }
+    }
+    public int Field213 {
+      get { return field213_; }
+    }
+    
+    public const int Field216FieldNumber = 216;
+    private bool hasField216;
+    private int field216_ = 0;
+    public bool HasField216 {
+      get { return hasField216; }
+    }
+    public int Field216 {
+      get { return field216_; }
+    }
+    
+    public const int Field217FieldNumber = 217;
+    private bool hasField217;
+    private int field217_ = 0;
+    public bool HasField217 {
+      get { return hasField217; }
+    }
+    public int Field217 {
+      get { return field217_; }
+    }
+    
+    public const int Field218FieldNumber = 218;
+    private bool hasField218;
+    private int field218_ = 0;
+    public bool HasField218 {
+      get { return hasField218; }
+    }
+    public int Field218 {
+      get { return field218_; }
+    }
+    
+    public const int Field220FieldNumber = 220;
+    private bool hasField220;
+    private int field220_ = 0;
+    public bool HasField220 {
+      get { return hasField220; }
+    }
+    public int Field220 {
+      get { return field220_; }
+    }
+    
+    public const int Field221FieldNumber = 221;
+    private bool hasField221;
+    private int field221_ = 0;
+    public bool HasField221 {
+      get { return hasField221; }
+    }
+    public int Field221 {
+      get { return field221_; }
+    }
+    
+    public const int Field222FieldNumber = 222;
+    private bool hasField222;
+    private float field222_ = 0F;
+    public bool HasField222 {
+      get { return hasField222; }
+    }
+    public float Field222 {
+      get { return field222_; }
+    }
+    
+    public const int Field63FieldNumber = 63;
+    private bool hasField63;
+    private int field63_ = 0;
+    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_ = 0L;
+    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_ = 0;
+    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_ = false;
+    public bool HasField205 {
+      get { return hasField205; }
+    }
+    public bool Field205 {
+      get { return field205_; }
+    }
+    
+    public const int Field206FieldNumber = 206;
+    private bool hasField206;
+    private bool field206_ = false;
+    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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SizeMessage2 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SizeMessage2 result = new SizeMessage2();
+      
+      protected override SizeMessage2 MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SizeMessage2();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        result.group1_.MakeReadOnly();
+        result.field128_.MakeReadOnly();
+        result.field127_.MakeReadOnly();
+        result.field130_.MakeReadOnly();
+        SizeMessage2 returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      
+      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");
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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) {
+        result.hasField4 = true;
+        result.field4_ = value;
+        return this;
+      }
+      public Builder ClearField4() {
+        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) {
+        result.hasField30 = true;
+        result.field30_ = value;
+        return this;
+      }
+      public Builder ClearField30() {
+        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) {
+        result.hasField75 = true;
+        result.field75_ = value;
+        return this;
+      }
+      public Builder ClearField75() {
+        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");
+        result.hasField6 = true;
+        result.field6_ = value;
+        return this;
+      }
+      public Builder ClearField6() {
+        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");
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField21 = true;
+        result.field21_ = value;
+        return this;
+      }
+      public Builder ClearField21() {
+        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) {
+        result.hasField71 = true;
+        result.field71_ = value;
+        return this;
+      }
+      public Builder ClearField71() {
+        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) {
+        result.hasField25 = true;
+        result.field25_ = value;
+        return this;
+      }
+      public Builder ClearField25() {
+        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) {
+        result.hasField109 = true;
+        result.field109_ = value;
+        return this;
+      }
+      public Builder ClearField109() {
+        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) {
+        result.hasField210 = true;
+        result.field210_ = value;
+        return this;
+      }
+      public Builder ClearField210() {
+        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) {
+        result.hasField211 = true;
+        result.field211_ = value;
+        return this;
+      }
+      public Builder ClearField211() {
+        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) {
+        result.hasField212 = true;
+        result.field212_ = value;
+        return this;
+      }
+      public Builder ClearField212() {
+        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) {
+        result.hasField213 = true;
+        result.field213_ = value;
+        return this;
+      }
+      public Builder ClearField213() {
+        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) {
+        result.hasField216 = true;
+        result.field216_ = value;
+        return this;
+      }
+      public Builder ClearField216() {
+        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) {
+        result.hasField217 = true;
+        result.field217_ = value;
+        return this;
+      }
+      public Builder ClearField217() {
+        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) {
+        result.hasField218 = true;
+        result.field218_ = value;
+        return this;
+      }
+      public Builder ClearField218() {
+        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) {
+        result.hasField220 = true;
+        result.field220_ = value;
+        return this;
+      }
+      public Builder ClearField220() {
+        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) {
+        result.hasField221 = true;
+        result.field221_ = value;
+        return this;
+      }
+      public Builder ClearField221() {
+        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) {
+        result.hasField222 = true;
+        result.field222_ = value;
+        return this;
+      }
+      public Builder ClearField222() {
+        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) {
+        result.hasField63 = true;
+        result.field63_ = value;
+        return this;
+      }
+      public Builder ClearField63() {
+        result.hasField63 = false;
+        result.field63_ = 0;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> Group1List {
+        get { return result.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");
+        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");
+        result.group1_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.group1_.Add(value);
+        return this;
+      }
+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        result.group1_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> values) {
+        base.AddRange(values, result.group1_);
+        return this;
+      }
+      public Builder ClearGroup1() {
+        result.group1_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<string> Field128List {
+        get { return result.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");
+        result.field128_[index] = value;
+        return this;
+      }
+      public Builder AddField128(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.field128_.Add(value);
+        return this;
+      }
+      public Builder AddRangeField128(scg::IEnumerable<string> values) {
+        base.AddRange(values, result.field128_);
+        return this;
+      }
+      public Builder ClearField128() {
+        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) {
+        result.hasField131 = true;
+        result.field131_ = value;
+        return this;
+      }
+      public Builder ClearField131() {
+        result.hasField131 = false;
+        result.field131_ = 0L;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<string> Field127List {
+        get { return result.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");
+        result.field127_[index] = value;
+        return this;
+      }
+      public Builder AddField127(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.field127_.Add(value);
+        return this;
+      }
+      public Builder AddRangeField127(scg::IEnumerable<string> values) {
+        base.AddRange(values, result.field127_);
+        return this;
+      }
+      public Builder ClearField127() {
+        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) {
+        result.hasField129 = true;
+        result.field129_ = value;
+        return this;
+      }
+      public Builder ClearField129() {
+        result.hasField129 = false;
+        result.field129_ = 0;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<long> Field130List {
+        get { return result.field130_; }
+      }
+      public int Field130Count {
+        get { return result.Field130Count; }
+      }
+      public long GetField130(int index) {
+        return result.GetField130(index);
+      }
+      public Builder SetField130(int index, long value) {
+        result.field130_[index] = value;
+        return this;
+      }
+      public Builder AddField130(long value) {
+        result.field130_.Add(value);
+        return this;
+      }
+      public Builder AddRangeField130(scg::IEnumerable<long> values) {
+        base.AddRange(values, result.field130_);
+        return this;
+      }
+      public Builder ClearField130() {
+        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) {
+        result.hasField205 = true;
+        result.field205_ = value;
+        return this;
+      }
+      public Builder ClearField205() {
+        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) {
+        result.hasField206 = true;
+        result.field206_ = value;
+        return this;
+      }
+      public Builder ClearField206() {
+        result.hasField206 = false;
+        result.field206_ = false;
+        return this;
+      }
+    }
+    static SizeMessage2() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SizeMessage2GroupedMessage : pb::GeneratedMessage<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> {
+    private static readonly SizeMessage2GroupedMessage defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SizeMessage2GroupedMessage__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable; }
+    }
+    
+    public const int Field1FieldNumber = 1;
+    private bool hasField1;
+    private float field1_ = 0F;
+    public bool HasField1 {
+      get { return hasField1; }
+    }
+    public float Field1 {
+      get { return field1_; }
+    }
+    
+    public const int Field2FieldNumber = 2;
+    private bool hasField2;
+    private float field2_ = 0F;
+    public bool HasField2 {
+      get { return hasField2; }
+    }
+    public float Field2 {
+      get { return field2_; }
+    }
+    
+    public const int Field3FieldNumber = 3;
+    private bool hasField3;
+    private float field3_ = 0F;
+    public bool HasField3 {
+      get { return hasField3; }
+    }
+    public float Field3 {
+      get { return field3_; }
+    }
+    
+    public const int Field4FieldNumber = 4;
+    private bool hasField4;
+    private bool field4_ = false;
+    public bool HasField4 {
+      get { return hasField4; }
+    }
+    public bool Field4 {
+      get { return field4_; }
+    }
+    
+    public const int Field5FieldNumber = 5;
+    private bool hasField5;
+    private bool field5_ = false;
+    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_ = false;
+    public bool HasField7 {
+      get { return hasField7; }
+    }
+    public bool Field7 {
+      get { return field7_; }
+    }
+    
+    public const int Field8FieldNumber = 8;
+    private bool hasField8;
+    private float field8_ = 0F;
+    public bool HasField8 {
+      get { return hasField8; }
+    }
+    public float Field8 {
+      get { return field8_; }
+    }
+    
+    public const int Field9FieldNumber = 9;
+    private bool hasField9;
+    private bool field9_ = false;
+    public bool HasField9 {
+      get { return hasField9; }
+    }
+    public bool Field9 {
+      get { return field9_; }
+    }
+    
+    public const int Field10FieldNumber = 10;
+    private bool hasField10;
+    private float field10_ = 0F;
+    public bool HasField10 {
+      get { return hasField10; }
+    }
+    public float Field10 {
+      get { return field10_; }
+    }
+    
+    public const int Field11FieldNumber = 11;
+    private bool hasField11;
+    private long field11_ = 0L;
+    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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SizeMessage2GroupedMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2GroupedMessage, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SizeMessage2GroupedMessage result = new SizeMessage2GroupedMessage();
+      
+      protected override SizeMessage2GroupedMessage MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SizeMessage2GroupedMessage();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        SizeMessage2GroupedMessage returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      
+      public bool HasField1 {
+        get { return result.HasField1; }
+      }
+      public float Field1 {
+        get { return result.Field1; }
+        set { SetField1(value); }
+      }
+      public Builder SetField1(float value) {
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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) {
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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) {
+        result.hasField4 = true;
+        result.field4_ = value;
+        return this;
+      }
+      public Builder ClearField4() {
+        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) {
+        result.hasField5 = true;
+        result.field5_ = value;
+        return this;
+      }
+      public Builder ClearField5() {
+        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) {
+        result.hasField6 = true;
+        result.field6_ = value;
+        return this;
+      }
+      public Builder ClearField6() {
+        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) {
+        result.hasField7 = true;
+        result.field7_ = value;
+        return this;
+      }
+      public Builder ClearField7() {
+        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) {
+        result.hasField8 = true;
+        result.field8_ = value;
+        return this;
+      }
+      public Builder ClearField8() {
+        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) {
+        result.hasField9 = true;
+        result.field9_ = value;
+        return this;
+      }
+      public Builder ClearField9() {
+        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) {
+        result.hasField10 = true;
+        result.field10_ = value;
+        return this;
+      }
+      public Builder ClearField10() {
+        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) {
+        result.hasField11 = true;
+        result.field11_ = value;
+        return this;
+      }
+      public Builder ClearField11() {
+        result.hasField11 = false;
+        result.field11_ = 0L;
+        return this;
+      }
+    }
+    static SizeMessage2GroupedMessage() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);
+    }
+  }
+  
+  #endregion
+  
+}

+ 6131 - 0
src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs

@@ -0,0 +1,6131 @@
+// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48.  DO NOT EDIT!
+
+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()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  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_benchmarks_SpeedMessage1__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Builder> internal__static_benchmarks_SpeedMessage1__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder> internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder> internal__static_benchmarks_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(
+          "Ch5nb29nbGUvdGVzdC9nb29nbGVfc3BlZWQucHJvdG8SCmJlbmNobWFya3Ma" + 
+          "JGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5wcm90byL4BgoNU3Bl" + 
+          "ZWRNZXNzYWdlMRIOCgZmaWVsZDEYASACKAkSDgoGZmllbGQ5GAkgASgJEg8K" + 
+          "B2ZpZWxkMTgYEiABKAkSFgoHZmllbGQ4MBhQIAEoCDoFZmFsc2USFQoHZmll" + 
+          "bGQ4MRhRIAEoCDoEdHJ1ZRIOCgZmaWVsZDIYAiACKAUSDgoGZmllbGQzGAMg" + 
+          "AigFEhEKCGZpZWxkMjgwGJgCIAEoBRIRCgZmaWVsZDYYBiABKAU6ATASDwoH" + 
+          "ZmllbGQyMhgWIAEoAxIOCgZmaWVsZDQYBCABKAkSDgoGZmllbGQ1GAUgAygG" + 
+          "EhYKB2ZpZWxkNTkYOyABKAg6BWZhbHNlEg4KBmZpZWxkNxgHIAEoCRIPCgdm" + 
+          "aWVsZDE2GBAgASgFEhQKCGZpZWxkMTMwGIIBIAEoBToBMBIVCgdmaWVsZDEy" + 
+          "GAwgASgIOgR0cnVlEhUKB2ZpZWxkMTcYESABKAg6BHRydWUSFQoHZmllbGQx" + 
+          "MxgNIAEoCDoEdHJ1ZRIVCgdmaWVsZDE0GA4gASgIOgR0cnVlEhMKCGZpZWxk" + 
+          "MTA0GGggASgFOgEwEhMKCGZpZWxkMTAwGGQgASgFOgEwEhMKCGZpZWxkMTAx" + 
+          "GGUgASgFOgEwEhAKCGZpZWxkMTAyGGYgASgJEhAKCGZpZWxkMTAzGGcgASgJ" + 
+          "EhIKB2ZpZWxkMjkYHSABKAU6ATASFgoHZmllbGQzMBgeIAEoCDoFZmFsc2US" + 
+          "EwoHZmllbGQ2MBg8IAEoBToCLTESFQoIZmllbGQyNzEYjwIgASgFOgItMRIV" + 
+          "CghmaWVsZDI3MhiQAiABKAU6Ai0xEhEKCGZpZWxkMTUwGJYBIAEoBRISCgdm" + 
+          "aWVsZDIzGBcgASgFOgEwEhYKB2ZpZWxkMjQYGCABKAg6BWZhbHNlEhIKB2Zp" + 
+          "ZWxkMjUYGSABKAU6ATASNAoHZmllbGQxNRgPIAEoCzIjLmJlbmNobWFya3Mu" + 
+          "U3BlZWRNZXNzYWdlMVN1Yk1lc3NhZ2USDwoHZmllbGQ3OBhOIAEoCBISCgdm" + 
+          "aWVsZDY3GEMgASgFOgEwEg8KB2ZpZWxkNjgYRCABKAUSFAoIZmllbGQxMjgY" + 
+          "gAEgASgFOgEwEigKCGZpZWxkMTI5GIEBIAEoCToVeHh4eHh4eHh4eHh4eHh4" + 
+          "eHh4eHh4EhQKCGZpZWxkMTMxGIMBIAEoBToBMCKiAwoXU3BlZWRNZXNzYWdl" + 
+          "MVN1Yk1lc3NhZ2USEQoGZmllbGQxGAEgASgFOgEwEhEKBmZpZWxkMhgCIAEo" + 
+          "BToBMBIRCgZmaWVsZDMYAyABKAU6ATASDwoHZmllbGQxNRgPIAEoCRIVCgdm" + 
+          "aWVsZDEyGAwgASgIOgR0cnVlEg8KB2ZpZWxkMTMYDSABKAMSDwoHZmllbGQx" + 
+          "NBgOIAEoAxIPCgdmaWVsZDE2GBAgASgFEhIKB2ZpZWxkMTkYEyABKAU6ATIS" + 
+          "FQoHZmllbGQyMBgUIAEoCDoEdHJ1ZRIVCgdmaWVsZDI4GBwgASgIOgR0cnVl" + 
+          "Eg8KB2ZpZWxkMjEYFSABKAYSDwoHZmllbGQyMhgWIAEoBRIWCgdmaWVsZDIz" + 
+          "GBcgASgIOgVmYWxzZRIYCghmaWVsZDIwNhjOASABKAg6BWZhbHNlEhEKCGZp" + 
+          "ZWxkMjAzGMsBIAEoBxIRCghmaWVsZDIwNBjMASABKAUSEQoIZmllbGQyMDUY" + 
+          "zQEgASgJEhEKCGZpZWxkMjA3GM8BIAEoBBIRCghmaWVsZDMwMBisAiABKAQi" + 
+          "ygcKDVNwZWVkTWVzc2FnZTISDgoGZmllbGQxGAEgASgJEg4KBmZpZWxkMxgD" + 
+          "IAEoAxIOCgZmaWVsZDQYBCABKAMSDwoHZmllbGQzMBgeIAEoAxIWCgdmaWVs" + 
+          "ZDc1GEsgASgIOgVmYWxzZRIOCgZmaWVsZDYYBiABKAkSDgoGZmllbGQyGAIg" + 
+          "ASgMEhIKB2ZpZWxkMjEYFSABKAU6ATASDwoHZmllbGQ3MRhHIAEoBRIPCgdm" + 
+          "aWVsZDI1GBkgASgCEhMKCGZpZWxkMTA5GG0gASgFOgEwEhQKCGZpZWxkMjEw" + 
+          "GNIBIAEoBToBMBIUCghmaWVsZDIxMRjTASABKAU6ATASFAoIZmllbGQyMTIY" + 
+          "1AEgASgFOgEwEhQKCGZpZWxkMjEzGNUBIAEoBToBMBIUCghmaWVsZDIxNhjY" + 
+          "ASABKAU6ATASFAoIZmllbGQyMTcY2QEgASgFOgEwEhQKCGZpZWxkMjE4GNoB" + 
+          "IAEoBToBMBIUCghmaWVsZDIyMBjcASABKAU6ATASFAoIZmllbGQyMjEY3QEg" + 
+          "ASgFOgEwEhQKCGZpZWxkMjIyGN4BIAEoAjoBMBIPCgdmaWVsZDYzGD8gASgF" + 
+          "EjAKBmdyb3VwMRgKIAMoCjIgLmJlbmNobWFya3MuU3BlZWRNZXNzYWdlMi5H" + 
+          "cm91cDESEQoIZmllbGQxMjgYgAEgAygJEhEKCGZpZWxkMTMxGIMBIAEoAxIQ" + 
+          "CghmaWVsZDEyNxh/IAMoCRIRCghmaWVsZDEyORiBASABKAUSEQoIZmllbGQx" + 
+          "MzAYggEgAygDEhgKCGZpZWxkMjA1GM0BIAEoCDoFZmFsc2USGAoIZmllbGQy" + 
+          "MDYYzgEgASgIOgVmYWxzZRrDAgoGR3JvdXAxEg8KB2ZpZWxkMTEYCyACKAIS" + 
+          "DwoHZmllbGQyNhgaIAEoAhIPCgdmaWVsZDEyGAwgASgJEg8KB2ZpZWxkMTMY" + 
+          "DSABKAkSDwoHZmllbGQxNBgOIAMoCRIPCgdmaWVsZDE1GA8gAigEEg4KBmZp" + 
+          "ZWxkNRgFIAEoBRIPCgdmaWVsZDI3GBsgASgJEg8KB2ZpZWxkMjgYHCABKAUS" + 
+          "DwoHZmllbGQyORgdIAEoCRIPCgdmaWVsZDE2GBAgASgJEg8KB2ZpZWxkMjIY" + 
+          "FiADKAkSDwoHZmllbGQ3MxhJIAMoBRISCgdmaWVsZDIwGBQgASgFOgEwEg8K" + 
+          "B2ZpZWxkMjQYGCABKAkSOAoHZmllbGQzMRgfIAEoCzInLmJlbmNobWFya3Mu" + 
+          "U3BlZWRNZXNzYWdlMkdyb3VwZWRNZXNzYWdlIt8BChtTcGVlZE1lc3NhZ2Uy" + 
+          "R3JvdXBlZE1lc3NhZ2USDgoGZmllbGQxGAEgASgCEg4KBmZpZWxkMhgCIAEo" + 
+          "AhIRCgZmaWVsZDMYAyABKAI6ATASDgoGZmllbGQ0GAQgASgIEg4KBmZpZWxk" + 
+          "NRgFIAEoCBIUCgZmaWVsZDYYBiABKAg6BHRydWUSFQoGZmllbGQ3GAcgASgI" + 
+          "OgVmYWxzZRIOCgZmaWVsZDgYCCABKAISDgoGZmllbGQ5GAkgASgIEg8KB2Zp" + 
+          "ZWxkMTAYCiABKAISDwoHZmllbGQxMRgLIAEoA0JTQgtHb29nbGVTcGVlZEgB" + 
+          "wj5BCiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MSHFVuaXRU" + 
+          "ZXN0R29vZ2xlU3BlZWRQcm90b0ZpbGU=");
+      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.TestProtos.SpeedMessage1, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SpeedMessage2, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.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.TestProtos.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.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()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SpeedMessage1 : pb::GeneratedMessage<SpeedMessage1, SpeedMessage1.Builder> {
+    private static readonly SpeedMessage1 defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SpeedMessage1__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1, SpeedMessage1.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.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_ = false;
+    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_ = 0;
+    public bool HasField2 {
+      get { return hasField2; }
+    }
+    public int Field2 {
+      get { return field2_; }
+    }
+    
+    public const int Field3FieldNumber = 3;
+    private bool hasField3;
+    private int field3_ = 0;
+    public bool HasField3 {
+      get { return hasField3; }
+    }
+    public int Field3 {
+      get { return field3_; }
+    }
+    
+    public const int Field280FieldNumber = 280;
+    private bool hasField280;
+    private int field280_ = 0;
+    public bool HasField280 {
+      get { return hasField280; }
+    }
+    public int Field280 {
+      get { return field280_; }
+    }
+    
+    public const int Field6FieldNumber = 6;
+    private bool hasField6;
+    private int field6_ = 0;
+    public bool HasField6 {
+      get { return hasField6; }
+    }
+    public int Field6 {
+      get { return field6_; }
+    }
+    
+    public const int Field22FieldNumber = 22;
+    private bool hasField22;
+    private long field22_ = 0L;
+    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_ = false;
+    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_ = 0;
+    public bool HasField16 {
+      get { return hasField16; }
+    }
+    public int Field16 {
+      get { return field16_; }
+    }
+    
+    public const int Field130FieldNumber = 130;
+    private bool hasField130;
+    private int field130_ = 0;
+    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_ = 0;
+    public bool HasField104 {
+      get { return hasField104; }
+    }
+    public int Field104 {
+      get { return field104_; }
+    }
+    
+    public const int Field100FieldNumber = 100;
+    private bool hasField100;
+    private int field100_ = 0;
+    public bool HasField100 {
+      get { return hasField100; }
+    }
+    public int Field100 {
+      get { return field100_; }
+    }
+    
+    public const int Field101FieldNumber = 101;
+    private bool hasField101;
+    private int field101_ = 0;
+    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_ = 0;
+    public bool HasField29 {
+      get { return hasField29; }
+    }
+    public int Field29 {
+      get { return field29_; }
+    }
+    
+    public const int Field30FieldNumber = 30;
+    private bool hasField30;
+    private bool field30_ = false;
+    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_ = 0;
+    public bool HasField150 {
+      get { return hasField150; }
+    }
+    public int Field150 {
+      get { return field150_; }
+    }
+    
+    public const int Field23FieldNumber = 23;
+    private bool hasField23;
+    private int field23_ = 0;
+    public bool HasField23 {
+      get { return hasField23; }
+    }
+    public int Field23 {
+      get { return field23_; }
+    }
+    
+    public const int Field24FieldNumber = 24;
+    private bool hasField24;
+    private bool field24_ = false;
+    public bool HasField24 {
+      get { return hasField24; }
+    }
+    public bool Field24 {
+      get { return field24_; }
+    }
+    
+    public const int Field25FieldNumber = 25;
+    private bool hasField25;
+    private int field25_ = 0;
+    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_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance;
+    public bool HasField15 {
+      get { return hasField15; }
+    }
+    public global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage Field15 {
+      get { return field15_; }
+    }
+    
+    public const int Field78FieldNumber = 78;
+    private bool hasField78;
+    private bool field78_ = false;
+    public bool HasField78 {
+      get { return hasField78; }
+    }
+    public bool Field78 {
+      get { return field78_; }
+    }
+    
+    public const int Field67FieldNumber = 67;
+    private bool hasField67;
+    private int field67_ = 0;
+    public bool HasField67 {
+      get { return hasField67; }
+    }
+    public int Field67 {
+      get { return field67_; }
+    }
+    
+    public const int Field68FieldNumber = 68;
+    private bool hasField68;
+    private int field68_ = 0;
+    public bool HasField68 {
+      get { return hasField68; }
+    }
+    public int Field68 {
+      get { return field68_; }
+    }
+    
+    public const int Field128FieldNumber = 128;
+    private bool hasField128;
+    private int field128_ = 0;
+    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_ = 0;
+    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::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasField1) {
+        output.WriteString(1, Field1);
+      }
+      if (HasField2) {
+        output.WriteInt32(2, Field2);
+      }
+      if (HasField3) {
+        output.WriteInt32(3, Field3);
+      }
+      if (HasField4) {
+        output.WriteString(4, Field4);
+      }
+      if (field5_.Count > 0) {
+        foreach (ulong element in field5_) {
+          output.WriteFixed64(5, element);
+        }
+      }
+      if (HasField6) {
+        output.WriteInt32(6, Field6);
+      }
+      if (HasField7) {
+        output.WriteString(7, Field7);
+      }
+      if (HasField9) {
+        output.WriteString(9, Field9);
+      }
+      if (HasField12) {
+        output.WriteBool(12, Field12);
+      }
+      if (HasField13) {
+        output.WriteBool(13, Field13);
+      }
+      if (HasField14) {
+        output.WriteBool(14, Field14);
+      }
+      if (HasField15) {
+        output.WriteMessage(15, Field15);
+      }
+      if (HasField16) {
+        output.WriteInt32(16, Field16);
+      }
+      if (HasField17) {
+        output.WriteBool(17, Field17);
+      }
+      if (HasField18) {
+        output.WriteString(18, Field18);
+      }
+      if (HasField22) {
+        output.WriteInt64(22, Field22);
+      }
+      if (HasField23) {
+        output.WriteInt32(23, Field23);
+      }
+      if (HasField24) {
+        output.WriteBool(24, Field24);
+      }
+      if (HasField25) {
+        output.WriteInt32(25, Field25);
+      }
+      if (HasField29) {
+        output.WriteInt32(29, Field29);
+      }
+      if (HasField30) {
+        output.WriteBool(30, Field30);
+      }
+      if (HasField59) {
+        output.WriteBool(59, Field59);
+      }
+      if (HasField60) {
+        output.WriteInt32(60, Field60);
+      }
+      if (HasField67) {
+        output.WriteInt32(67, Field67);
+      }
+      if (HasField68) {
+        output.WriteInt32(68, Field68);
+      }
+      if (HasField78) {
+        output.WriteBool(78, Field78);
+      }
+      if (HasField80) {
+        output.WriteBool(80, Field80);
+      }
+      if (HasField81) {
+        output.WriteBool(81, Field81);
+      }
+      if (HasField100) {
+        output.WriteInt32(100, Field100);
+      }
+      if (HasField101) {
+        output.WriteInt32(101, Field101);
+      }
+      if (HasField102) {
+        output.WriteString(102, Field102);
+      }
+      if (HasField103) {
+        output.WriteString(103, Field103);
+      }
+      if (HasField104) {
+        output.WriteInt32(104, Field104);
+      }
+      if (HasField128) {
+        output.WriteInt32(128, Field128);
+      }
+      if (HasField129) {
+        output.WriteString(129, Field129);
+      }
+      if (HasField130) {
+        output.WriteInt32(130, Field130);
+      }
+      if (HasField131) {
+        output.WriteInt32(131, Field131);
+      }
+      if (HasField150) {
+        output.WriteInt32(150, Field150);
+      }
+      if (HasField271) {
+        output.WriteInt32(271, Field271);
+      }
+      if (HasField272) {
+        output.WriteInt32(272, Field272);
+      }
+      if (HasField280) {
+        output.WriteInt32(280, Field280);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SpeedMessage1 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SpeedMessage1 result = new SpeedMessage1();
+      
+      protected override SpeedMessage1 MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SpeedMessage1();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        result.field5_.MakeReadOnly();
+        SpeedMessage1 returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        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) {
+          base.AddRange(other.field5_, result.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::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 10: {
+              Field1 = input.ReadString();
+              break;
+            }
+            case 16: {
+              Field2 = input.ReadInt32();
+              break;
+            }
+            case 24: {
+              Field3 = input.ReadInt32();
+              break;
+            }
+            case 34: {
+              Field4 = input.ReadString();
+              break;
+            }
+            case 41: {
+              AddField5(input.ReadFixed64());
+              break;
+            }
+            case 48: {
+              Field6 = input.ReadInt32();
+              break;
+            }
+            case 58: {
+              Field7 = input.ReadString();
+              break;
+            }
+            case 74: {
+              Field9 = input.ReadString();
+              break;
+            }
+            case 96: {
+              Field12 = input.ReadBool();
+              break;
+            }
+            case 104: {
+              Field13 = input.ReadBool();
+              break;
+            }
+            case 112: {
+              Field14 = input.ReadBool();
+              break;
+            }
+            case 122: {
+              global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.CreateBuilder();
+              if (HasField15) {
+                subBuilder.MergeFrom(Field15);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Field15 = subBuilder.BuildPartial();
+              break;
+            }
+            case 128: {
+              Field16 = input.ReadInt32();
+              break;
+            }
+            case 136: {
+              Field17 = input.ReadBool();
+              break;
+            }
+            case 146: {
+              Field18 = input.ReadString();
+              break;
+            }
+            case 176: {
+              Field22 = input.ReadInt64();
+              break;
+            }
+            case 184: {
+              Field23 = input.ReadInt32();
+              break;
+            }
+            case 192: {
+              Field24 = input.ReadBool();
+              break;
+            }
+            case 200: {
+              Field25 = input.ReadInt32();
+              break;
+            }
+            case 232: {
+              Field29 = input.ReadInt32();
+              break;
+            }
+            case 240: {
+              Field30 = input.ReadBool();
+              break;
+            }
+            case 472: {
+              Field59 = input.ReadBool();
+              break;
+            }
+            case 480: {
+              Field60 = input.ReadInt32();
+              break;
+            }
+            case 536: {
+              Field67 = input.ReadInt32();
+              break;
+            }
+            case 544: {
+              Field68 = input.ReadInt32();
+              break;
+            }
+            case 624: {
+              Field78 = input.ReadBool();
+              break;
+            }
+            case 640: {
+              Field80 = input.ReadBool();
+              break;
+            }
+            case 648: {
+              Field81 = input.ReadBool();
+              break;
+            }
+            case 800: {
+              Field100 = input.ReadInt32();
+              break;
+            }
+            case 808: {
+              Field101 = input.ReadInt32();
+              break;
+            }
+            case 818: {
+              Field102 = input.ReadString();
+              break;
+            }
+            case 826: {
+              Field103 = input.ReadString();
+              break;
+            }
+            case 832: {
+              Field104 = input.ReadInt32();
+              break;
+            }
+            case 1024: {
+              Field128 = input.ReadInt32();
+              break;
+            }
+            case 1034: {
+              Field129 = input.ReadString();
+              break;
+            }
+            case 1040: {
+              Field130 = input.ReadInt32();
+              break;
+            }
+            case 1048: {
+              Field131 = input.ReadInt32();
+              break;
+            }
+            case 1200: {
+              Field150 = input.ReadInt32();
+              break;
+            }
+            case 2168: {
+              Field271 = input.ReadInt32();
+              break;
+            }
+            case 2176: {
+              Field272 = input.ReadInt32();
+              break;
+            }
+            case 2240: {
+              Field280 = input.ReadInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      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");
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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");
+        result.hasField9 = true;
+        result.field9_ = value;
+        return this;
+      }
+      public Builder ClearField9() {
+        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");
+        result.hasField18 = true;
+        result.field18_ = value;
+        return this;
+      }
+      public Builder ClearField18() {
+        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) {
+        result.hasField80 = true;
+        result.field80_ = value;
+        return this;
+      }
+      public Builder ClearField80() {
+        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) {
+        result.hasField81 = true;
+        result.field81_ = value;
+        return this;
+      }
+      public Builder ClearField81() {
+        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) {
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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) {
+        result.hasField280 = true;
+        result.field280_ = value;
+        return this;
+      }
+      public Builder ClearField280() {
+        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) {
+        result.hasField6 = true;
+        result.field6_ = value;
+        return this;
+      }
+      public Builder ClearField6() {
+        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) {
+        result.hasField22 = true;
+        result.field22_ = value;
+        return this;
+      }
+      public Builder ClearField22() {
+        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");
+        result.hasField4 = true;
+        result.field4_ = value;
+        return this;
+      }
+      public Builder ClearField4() {
+        result.hasField4 = false;
+        result.field4_ = "";
+        return this;
+      }
+      
+      [global::System.CLSCompliant(false)]
+      public pbc::IPopsicleList<ulong> Field5List {
+        get { return result.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) {
+        result.field5_[index] = value;
+        return this;
+      }
+      [global::System.CLSCompliant(false)]
+      public Builder AddField5(ulong value) {
+        result.field5_.Add(value);
+        return this;
+      }
+      [global::System.CLSCompliant(false)]
+      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {
+        base.AddRange(values, result.field5_);
+        return this;
+      }
+      public Builder ClearField5() {
+        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) {
+        result.hasField59 = true;
+        result.field59_ = value;
+        return this;
+      }
+      public Builder ClearField59() {
+        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");
+        result.hasField7 = true;
+        result.field7_ = value;
+        return this;
+      }
+      public Builder ClearField7() {
+        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) {
+        result.hasField16 = true;
+        result.field16_ = value;
+        return this;
+      }
+      public Builder ClearField16() {
+        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) {
+        result.hasField130 = true;
+        result.field130_ = value;
+        return this;
+      }
+      public Builder ClearField130() {
+        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) {
+        result.hasField12 = true;
+        result.field12_ = value;
+        return this;
+      }
+      public Builder ClearField12() {
+        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) {
+        result.hasField17 = true;
+        result.field17_ = value;
+        return this;
+      }
+      public Builder ClearField17() {
+        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) {
+        result.hasField13 = true;
+        result.field13_ = value;
+        return this;
+      }
+      public Builder ClearField13() {
+        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) {
+        result.hasField14 = true;
+        result.field14_ = value;
+        return this;
+      }
+      public Builder ClearField14() {
+        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) {
+        result.hasField104 = true;
+        result.field104_ = value;
+        return this;
+      }
+      public Builder ClearField104() {
+        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) {
+        result.hasField100 = true;
+        result.field100_ = value;
+        return this;
+      }
+      public Builder ClearField100() {
+        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) {
+        result.hasField101 = true;
+        result.field101_ = value;
+        return this;
+      }
+      public Builder ClearField101() {
+        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");
+        result.hasField102 = true;
+        result.field102_ = value;
+        return this;
+      }
+      public Builder ClearField102() {
+        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");
+        result.hasField103 = true;
+        result.field103_ = value;
+        return this;
+      }
+      public Builder ClearField103() {
+        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) {
+        result.hasField29 = true;
+        result.field29_ = value;
+        return this;
+      }
+      public Builder ClearField29() {
+        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) {
+        result.hasField30 = true;
+        result.field30_ = value;
+        return this;
+      }
+      public Builder ClearField30() {
+        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) {
+        result.hasField60 = true;
+        result.field60_ = value;
+        return this;
+      }
+      public Builder ClearField60() {
+        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) {
+        result.hasField271 = true;
+        result.field271_ = value;
+        return this;
+      }
+      public Builder ClearField271() {
+        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) {
+        result.hasField272 = true;
+        result.field272_ = value;
+        return this;
+      }
+      public Builder ClearField272() {
+        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) {
+        result.hasField150 = true;
+        result.field150_ = value;
+        return this;
+      }
+      public Builder ClearField150() {
+        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) {
+        result.hasField23 = true;
+        result.field23_ = value;
+        return this;
+      }
+      public Builder ClearField23() {
+        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) {
+        result.hasField24 = true;
+        result.field24_ = value;
+        return this;
+      }
+      public Builder ClearField24() {
+        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) {
+        result.hasField25 = true;
+        result.field25_ = value;
+        return this;
+      }
+      public Builder ClearField25() {
+        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");
+        result.hasField15 = true;
+        result.field15_ = value;
+        return this;
+      }
+      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        result.hasField15 = true;
+        result.field15_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        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() {
+        result.hasField15 = false;
+        result.field15_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance;
+        return this;
+      }
+      
+      public bool HasField78 {
+        get { return result.HasField78; }
+      }
+      public bool Field78 {
+        get { return result.Field78; }
+        set { SetField78(value); }
+      }
+      public Builder SetField78(bool value) {
+        result.hasField78 = true;
+        result.field78_ = value;
+        return this;
+      }
+      public Builder ClearField78() {
+        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) {
+        result.hasField67 = true;
+        result.field67_ = value;
+        return this;
+      }
+      public Builder ClearField67() {
+        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) {
+        result.hasField68 = true;
+        result.field68_ = value;
+        return this;
+      }
+      public Builder ClearField68() {
+        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) {
+        result.hasField128 = true;
+        result.field128_ = value;
+        return this;
+      }
+      public Builder ClearField128() {
+        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");
+        result.hasField129 = true;
+        result.field129_ = value;
+        return this;
+      }
+      public Builder ClearField129() {
+        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) {
+        result.hasField131 = true;
+        result.field131_ = value;
+        return this;
+      }
+      public Builder ClearField131() {
+        result.hasField131 = false;
+        result.field131_ = 0;
+        return this;
+      }
+    }
+    static SpeedMessage1() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SpeedMessage1SubMessage : pb::GeneratedMessage<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> {
+    private static readonly SpeedMessage1SubMessage defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SpeedMessage1SubMessage__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable; }
+    }
+    
+    public const int Field1FieldNumber = 1;
+    private bool hasField1;
+    private int field1_ = 0;
+    public bool HasField1 {
+      get { return hasField1; }
+    }
+    public int Field1 {
+      get { return field1_; }
+    }
+    
+    public const int Field2FieldNumber = 2;
+    private bool hasField2;
+    private int field2_ = 0;
+    public bool HasField2 {
+      get { return hasField2; }
+    }
+    public int Field2 {
+      get { return field2_; }
+    }
+    
+    public const int Field3FieldNumber = 3;
+    private bool hasField3;
+    private int field3_ = 0;
+    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_ = 0L;
+    public bool HasField13 {
+      get { return hasField13; }
+    }
+    public long Field13 {
+      get { return field13_; }
+    }
+    
+    public const int Field14FieldNumber = 14;
+    private bool hasField14;
+    private long field14_ = 0L;
+    public bool HasField14 {
+      get { return hasField14; }
+    }
+    public long Field14 {
+      get { return field14_; }
+    }
+    
+    public const int Field16FieldNumber = 16;
+    private bool hasField16;
+    private int field16_ = 0;
+    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_ = 0;
+    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_ = 0;
+    public bool HasField22 {
+      get { return hasField22; }
+    }
+    public int Field22 {
+      get { return field22_; }
+    }
+    
+    public const int Field23FieldNumber = 23;
+    private bool hasField23;
+    private bool field23_ = false;
+    public bool HasField23 {
+      get { return hasField23; }
+    }
+    public bool Field23 {
+      get { return field23_; }
+    }
+    
+    public const int Field206FieldNumber = 206;
+    private bool hasField206;
+    private bool field206_ = false;
+    public bool HasField206 {
+      get { return hasField206; }
+    }
+    public bool Field206 {
+      get { return field206_; }
+    }
+    
+    public const int Field203FieldNumber = 203;
+    private bool hasField203;
+    private uint field203_ = 0;
+    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_ = 0;
+    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_ = 0UL;
+    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_ = 0UL;
+    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::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasField1) {
+        output.WriteInt32(1, Field1);
+      }
+      if (HasField2) {
+        output.WriteInt32(2, Field2);
+      }
+      if (HasField3) {
+        output.WriteInt32(3, Field3);
+      }
+      if (HasField12) {
+        output.WriteBool(12, Field12);
+      }
+      if (HasField13) {
+        output.WriteInt64(13, Field13);
+      }
+      if (HasField14) {
+        output.WriteInt64(14, Field14);
+      }
+      if (HasField15) {
+        output.WriteString(15, Field15);
+      }
+      if (HasField16) {
+        output.WriteInt32(16, Field16);
+      }
+      if (HasField19) {
+        output.WriteInt32(19, Field19);
+      }
+      if (HasField20) {
+        output.WriteBool(20, Field20);
+      }
+      if (HasField21) {
+        output.WriteFixed64(21, Field21);
+      }
+      if (HasField22) {
+        output.WriteInt32(22, Field22);
+      }
+      if (HasField23) {
+        output.WriteBool(23, Field23);
+      }
+      if (HasField28) {
+        output.WriteBool(28, Field28);
+      }
+      if (HasField203) {
+        output.WriteFixed32(203, Field203);
+      }
+      if (HasField204) {
+        output.WriteInt32(204, Field204);
+      }
+      if (HasField205) {
+        output.WriteString(205, Field205);
+      }
+      if (HasField206) {
+        output.WriteBool(206, Field206);
+      }
+      if (HasField207) {
+        output.WriteUInt64(207, Field207);
+      }
+      if (HasField300) {
+        output.WriteUInt64(300, Field300);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SpeedMessage1SubMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1SubMessage, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SpeedMessage1SubMessage result = new SpeedMessage1SubMessage();
+      
+      protected override SpeedMessage1SubMessage MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SpeedMessage1SubMessage();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        SpeedMessage1SubMessage returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        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::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 8: {
+              Field1 = input.ReadInt32();
+              break;
+            }
+            case 16: {
+              Field2 = input.ReadInt32();
+              break;
+            }
+            case 24: {
+              Field3 = input.ReadInt32();
+              break;
+            }
+            case 96: {
+              Field12 = input.ReadBool();
+              break;
+            }
+            case 104: {
+              Field13 = input.ReadInt64();
+              break;
+            }
+            case 112: {
+              Field14 = input.ReadInt64();
+              break;
+            }
+            case 122: {
+              Field15 = input.ReadString();
+              break;
+            }
+            case 128: {
+              Field16 = input.ReadInt32();
+              break;
+            }
+            case 152: {
+              Field19 = input.ReadInt32();
+              break;
+            }
+            case 160: {
+              Field20 = input.ReadBool();
+              break;
+            }
+            case 169: {
+              Field21 = input.ReadFixed64();
+              break;
+            }
+            case 176: {
+              Field22 = input.ReadInt32();
+              break;
+            }
+            case 184: {
+              Field23 = input.ReadBool();
+              break;
+            }
+            case 224: {
+              Field28 = input.ReadBool();
+              break;
+            }
+            case 1629: {
+              Field203 = input.ReadFixed32();
+              break;
+            }
+            case 1632: {
+              Field204 = input.ReadInt32();
+              break;
+            }
+            case 1642: {
+              Field205 = input.ReadString();
+              break;
+            }
+            case 1648: {
+              Field206 = input.ReadBool();
+              break;
+            }
+            case 1656: {
+              Field207 = input.ReadUInt64();
+              break;
+            }
+            case 2400: {
+              Field300 = input.ReadUInt64();
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      public bool HasField1 {
+        get { return result.HasField1; }
+      }
+      public int Field1 {
+        get { return result.Field1; }
+        set { SetField1(value); }
+      }
+      public Builder SetField1(int value) {
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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) {
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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");
+        result.hasField15 = true;
+        result.field15_ = value;
+        return this;
+      }
+      public Builder ClearField15() {
+        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) {
+        result.hasField12 = true;
+        result.field12_ = value;
+        return this;
+      }
+      public Builder ClearField12() {
+        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) {
+        result.hasField13 = true;
+        result.field13_ = value;
+        return this;
+      }
+      public Builder ClearField13() {
+        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) {
+        result.hasField14 = true;
+        result.field14_ = value;
+        return this;
+      }
+      public Builder ClearField14() {
+        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) {
+        result.hasField16 = true;
+        result.field16_ = value;
+        return this;
+      }
+      public Builder ClearField16() {
+        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) {
+        result.hasField19 = true;
+        result.field19_ = value;
+        return this;
+      }
+      public Builder ClearField19() {
+        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) {
+        result.hasField20 = true;
+        result.field20_ = value;
+        return this;
+      }
+      public Builder ClearField20() {
+        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) {
+        result.hasField28 = true;
+        result.field28_ = value;
+        return this;
+      }
+      public Builder ClearField28() {
+        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) {
+        result.hasField21 = true;
+        result.field21_ = value;
+        return this;
+      }
+      public Builder ClearField21() {
+        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) {
+        result.hasField22 = true;
+        result.field22_ = value;
+        return this;
+      }
+      public Builder ClearField22() {
+        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) {
+        result.hasField23 = true;
+        result.field23_ = value;
+        return this;
+      }
+      public Builder ClearField23() {
+        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) {
+        result.hasField206 = true;
+        result.field206_ = value;
+        return this;
+      }
+      public Builder ClearField206() {
+        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) {
+        result.hasField203 = true;
+        result.field203_ = value;
+        return this;
+      }
+      public Builder ClearField203() {
+        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) {
+        result.hasField204 = true;
+        result.field204_ = value;
+        return this;
+      }
+      public Builder ClearField204() {
+        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");
+        result.hasField205 = true;
+        result.field205_ = value;
+        return this;
+      }
+      public Builder ClearField205() {
+        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) {
+        result.hasField207 = true;
+        result.field207_ = value;
+        return this;
+      }
+      public Builder ClearField207() {
+        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) {
+        result.hasField300 = true;
+        result.field300_ = value;
+        return this;
+      }
+      public Builder ClearField300() {
+        result.hasField300 = false;
+        result.field300_ = 0UL;
+        return this;
+      }
+    }
+    static SpeedMessage1SubMessage() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SpeedMessage2 : pb::GeneratedMessage<SpeedMessage2, SpeedMessage2.Builder> {
+    private static readonly SpeedMessage2 defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SpeedMessage2__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2, SpeedMessage2.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2__FieldAccessorTable; }
+    }
+    
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public static class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {
+        private static readonly Group1 defaultInstance = new Builder().BuildPartial();
+        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_benchmarks_SpeedMessage2_Group1__Descriptor; }
+        }
+        
+        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {
+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable; }
+        }
+        
+        public const int Field11FieldNumber = 11;
+        private bool hasField11;
+        private float field11_ = 0F;
+        public bool HasField11 {
+          get { return hasField11; }
+        }
+        public float Field11 {
+          get { return field11_; }
+        }
+        
+        public const int Field26FieldNumber = 26;
+        private bool hasField26;
+        private float field26_ = 0F;
+        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_ = 0UL;
+        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_ = 0;
+        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_ = 0;
+        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_ = 0;
+        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_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance;
+        public bool HasField31 {
+          get { return hasField31; }
+        }
+        public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage Field31 {
+          get { return field31_; }
+        }
+        
+        public override bool IsInitialized {
+          get {
+            if (!hasField11) return false;
+            if (!hasField15) return false;
+            return true;
+          }
+        }
+        
+        public override void WriteTo(pb::CodedOutputStream output) {
+          int size = SerializedSize;
+          if (HasField5) {
+            output.WriteInt32(5, Field5);
+          }
+          if (HasField11) {
+            output.WriteFloat(11, Field11);
+          }
+          if (HasField12) {
+            output.WriteString(12, Field12);
+          }
+          if (HasField13) {
+            output.WriteString(13, Field13);
+          }
+          if (field14_.Count > 0) {
+            foreach (string element in field14_) {
+              output.WriteString(14, element);
+            }
+          }
+          if (HasField15) {
+            output.WriteUInt64(15, Field15);
+          }
+          if (HasField16) {
+            output.WriteString(16, Field16);
+          }
+          if (HasField20) {
+            output.WriteInt32(20, Field20);
+          }
+          if (field22_.Count > 0) {
+            foreach (string element in field22_) {
+              output.WriteString(22, element);
+            }
+          }
+          if (HasField24) {
+            output.WriteString(24, Field24);
+          }
+          if (HasField26) {
+            output.WriteFloat(26, Field26);
+          }
+          if (HasField27) {
+            output.WriteString(27, Field27);
+          }
+          if (HasField28) {
+            output.WriteInt32(28, Field28);
+          }
+          if (HasField29) {
+            output.WriteString(29, Field29);
+          }
+          if (HasField31) {
+            output.WriteMessage(31, Field31);
+          }
+          if (field73_.Count > 0) {
+            foreach (int element in field73_) {
+              output.WriteInt32(73, element);
+            }
+          }
+          UnknownFields.WriteTo(output);
+        }
+        
+        private int memoizedSerializedSize = -1;
+        public override int SerializedSize {
+          get {
+            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::CodedInputStream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static Group1 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        public 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 (Builder) new Builder().MergeFrom(prototype);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {
+          protected override Builder ThisBuilder {
+            get { return this; }
+          }
+          public Builder() {}
+          
+          Group1 result = new Group1();
+          
+          protected override Group1 MessageBeingBuilt {
+            get { return result; }
+          }
+          
+          public override Builder Clear() {
+            result = new Group1();
+            return this;
+          }
+          
+          public override Builder Clone() {
+            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 (result == null) {
+              throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+            }
+            result.field14_.MakeReadOnly();
+            result.field22_.MakeReadOnly();
+            result.field73_.MakeReadOnly();
+            Group1 returnMe = result;
+            result = null;
+            return returnMe;
+          }
+          
+          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;
+            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) {
+              base.AddRange(other.field14_, result.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) {
+              base.AddRange(other.field22_, result.field22_);
+            }
+            if (other.field73_.Count != 0) {
+              base.AddRange(other.field73_, result.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::CodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            pb::UnknownFieldSet.Builder unknownFields = null;
+            while (true) {
+              uint tag = input.ReadTag();
+              switch (tag) {
+                case 0: {
+                  if (unknownFields != null) {
+                    this.UnknownFields = unknownFields.Build();
+                  }
+                  return this;
+                }
+                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);
+                  break;
+                }
+                case 40: {
+                  Field5 = input.ReadInt32();
+                  break;
+                }
+                case 93: {
+                  Field11 = input.ReadFloat();
+                  break;
+                }
+                case 98: {
+                  Field12 = input.ReadString();
+                  break;
+                }
+                case 106: {
+                  Field13 = input.ReadString();
+                  break;
+                }
+                case 114: {
+                  AddField14(input.ReadString());
+                  break;
+                }
+                case 120: {
+                  Field15 = input.ReadUInt64();
+                  break;
+                }
+                case 130: {
+                  Field16 = input.ReadString();
+                  break;
+                }
+                case 160: {
+                  Field20 = input.ReadInt32();
+                  break;
+                }
+                case 178: {
+                  AddField22(input.ReadString());
+                  break;
+                }
+                case 194: {
+                  Field24 = input.ReadString();
+                  break;
+                }
+                case 213: {
+                  Field26 = input.ReadFloat();
+                  break;
+                }
+                case 218: {
+                  Field27 = input.ReadString();
+                  break;
+                }
+                case 224: {
+                  Field28 = input.ReadInt32();
+                  break;
+                }
+                case 234: {
+                  Field29 = input.ReadString();
+                  break;
+                }
+                case 250: {
+                  global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.CreateBuilder();
+                  if (HasField31) {
+                    subBuilder.MergeFrom(Field31);
+                  }
+                  input.ReadMessage(subBuilder, extensionRegistry);
+                  Field31 = subBuilder.BuildPartial();
+                  break;
+                }
+                case 584: {
+                  AddField73(input.ReadInt32());
+                  break;
+                }
+              }
+            }
+          }
+          
+          
+          public bool HasField11 {
+            get { return result.HasField11; }
+          }
+          public float Field11 {
+            get { return result.Field11; }
+            set { SetField11(value); }
+          }
+          public Builder SetField11(float value) {
+            result.hasField11 = true;
+            result.field11_ = value;
+            return this;
+          }
+          public Builder ClearField11() {
+            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) {
+            result.hasField26 = true;
+            result.field26_ = value;
+            return this;
+          }
+          public Builder ClearField26() {
+            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");
+            result.hasField12 = true;
+            result.field12_ = value;
+            return this;
+          }
+          public Builder ClearField12() {
+            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");
+            result.hasField13 = true;
+            result.field13_ = value;
+            return this;
+          }
+          public Builder ClearField13() {
+            result.hasField13 = false;
+            result.field13_ = "";
+            return this;
+          }
+          
+          public pbc::IPopsicleList<string> Field14List {
+            get { return result.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");
+            result.field14_[index] = value;
+            return this;
+          }
+          public Builder AddField14(string value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            result.field14_.Add(value);
+            return this;
+          }
+          public Builder AddRangeField14(scg::IEnumerable<string> values) {
+            base.AddRange(values, result.field14_);
+            return this;
+          }
+          public Builder ClearField14() {
+            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) {
+            result.hasField15 = true;
+            result.field15_ = value;
+            return this;
+          }
+          public Builder ClearField15() {
+            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) {
+            result.hasField5 = true;
+            result.field5_ = value;
+            return this;
+          }
+          public Builder ClearField5() {
+            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");
+            result.hasField27 = true;
+            result.field27_ = value;
+            return this;
+          }
+          public Builder ClearField27() {
+            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) {
+            result.hasField28 = true;
+            result.field28_ = value;
+            return this;
+          }
+          public Builder ClearField28() {
+            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");
+            result.hasField29 = true;
+            result.field29_ = value;
+            return this;
+          }
+          public Builder ClearField29() {
+            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");
+            result.hasField16 = true;
+            result.field16_ = value;
+            return this;
+          }
+          public Builder ClearField16() {
+            result.hasField16 = false;
+            result.field16_ = "";
+            return this;
+          }
+          
+          public pbc::IPopsicleList<string> Field22List {
+            get { return result.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");
+            result.field22_[index] = value;
+            return this;
+          }
+          public Builder AddField22(string value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            result.field22_.Add(value);
+            return this;
+          }
+          public Builder AddRangeField22(scg::IEnumerable<string> values) {
+            base.AddRange(values, result.field22_);
+            return this;
+          }
+          public Builder ClearField22() {
+            result.field22_.Clear();
+            return this;
+          }
+          
+          public pbc::IPopsicleList<int> Field73List {
+            get { return result.field73_; }
+          }
+          public int Field73Count {
+            get { return result.Field73Count; }
+          }
+          public int GetField73(int index) {
+            return result.GetField73(index);
+          }
+          public Builder SetField73(int index, int value) {
+            result.field73_[index] = value;
+            return this;
+          }
+          public Builder AddField73(int value) {
+            result.field73_.Add(value);
+            return this;
+          }
+          public Builder AddRangeField73(scg::IEnumerable<int> values) {
+            base.AddRange(values, result.field73_);
+            return this;
+          }
+          public Builder ClearField73() {
+            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) {
+            result.hasField20 = true;
+            result.field20_ = value;
+            return this;
+          }
+          public Builder ClearField20() {
+            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");
+            result.hasField24 = true;
+            result.field24_ = value;
+            return this;
+          }
+          public Builder ClearField24() {
+            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");
+            result.hasField31 = true;
+            result.field31_ = value;
+            return this;
+          }
+          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder builderForValue) {
+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+            result.hasField31 = true;
+            result.field31_ = builderForValue.Build();
+            return this;
+          }
+          public Builder MergeField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage value) {
+            pb::ThrowHelper.ThrowIfNull(value, "value");
+            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() {
+            result.hasField31 = false;
+            result.field31_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance;
+            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_ = 0L;
+    public bool HasField3 {
+      get { return hasField3; }
+    }
+    public long Field3 {
+      get { return field3_; }
+    }
+    
+    public const int Field4FieldNumber = 4;
+    private bool hasField4;
+    private long field4_ = 0L;
+    public bool HasField4 {
+      get { return hasField4; }
+    }
+    public long Field4 {
+      get { return field4_; }
+    }
+    
+    public const int Field30FieldNumber = 30;
+    private bool hasField30;
+    private long field30_ = 0L;
+    public bool HasField30 {
+      get { return hasField30; }
+    }
+    public long Field30 {
+      get { return field30_; }
+    }
+    
+    public const int Field75FieldNumber = 75;
+    private bool hasField75;
+    private bool field75_ = false;
+    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_ = 0;
+    public bool HasField21 {
+      get { return hasField21; }
+    }
+    public int Field21 {
+      get { return field21_; }
+    }
+    
+    public const int Field71FieldNumber = 71;
+    private bool hasField71;
+    private int field71_ = 0;
+    public bool HasField71 {
+      get { return hasField71; }
+    }
+    public int Field71 {
+      get { return field71_; }
+    }
+    
+    public const int Field25FieldNumber = 25;
+    private bool hasField25;
+    private float field25_ = 0F;
+    public bool HasField25 {
+      get { return hasField25; }
+    }
+    public float Field25 {
+      get { return field25_; }
+    }
+    
+    public const int Field109FieldNumber = 109;
+    private bool hasField109;
+    private int field109_ = 0;
+    public bool HasField109 {
+      get { return hasField109; }
+    }
+    public int Field109 {
+      get { return field109_; }
+    }
+    
+    public const int Field210FieldNumber = 210;
+    private bool hasField210;
+    private int field210_ = 0;
+    public bool HasField210 {
+      get { return hasField210; }
+    }
+    public int Field210 {
+      get { return field210_; }
+    }
+    
+    public const int Field211FieldNumber = 211;
+    private bool hasField211;
+    private int field211_ = 0;
+    public bool HasField211 {
+      get { return hasField211; }
+    }
+    public int Field211 {
+      get { return field211_; }
+    }
+    
+    public const int Field212FieldNumber = 212;
+    private bool hasField212;
+    private int field212_ = 0;
+    public bool HasField212 {
+      get { return hasField212; }
+    }
+    public int Field212 {
+      get { return field212_; }
+    }
+    
+    public const int Field213FieldNumber = 213;
+    private bool hasField213;
+    private int field213_ = 0;
+    public bool HasField213 {
+      get { return hasField213; }
+    }
+    public int Field213 {
+      get { return field213_; }
+    }
+    
+    public const int Field216FieldNumber = 216;
+    private bool hasField216;
+    private int field216_ = 0;
+    public bool HasField216 {
+      get { return hasField216; }
+    }
+    public int Field216 {
+      get { return field216_; }
+    }
+    
+    public const int Field217FieldNumber = 217;
+    private bool hasField217;
+    private int field217_ = 0;
+    public bool HasField217 {
+      get { return hasField217; }
+    }
+    public int Field217 {
+      get { return field217_; }
+    }
+    
+    public const int Field218FieldNumber = 218;
+    private bool hasField218;
+    private int field218_ = 0;
+    public bool HasField218 {
+      get { return hasField218; }
+    }
+    public int Field218 {
+      get { return field218_; }
+    }
+    
+    public const int Field220FieldNumber = 220;
+    private bool hasField220;
+    private int field220_ = 0;
+    public bool HasField220 {
+      get { return hasField220; }
+    }
+    public int Field220 {
+      get { return field220_; }
+    }
+    
+    public const int Field221FieldNumber = 221;
+    private bool hasField221;
+    private int field221_ = 0;
+    public bool HasField221 {
+      get { return hasField221; }
+    }
+    public int Field221 {
+      get { return field221_; }
+    }
+    
+    public const int Field222FieldNumber = 222;
+    private bool hasField222;
+    private float field222_ = 0F;
+    public bool HasField222 {
+      get { return hasField222; }
+    }
+    public float Field222 {
+      get { return field222_; }
+    }
+    
+    public const int Field63FieldNumber = 63;
+    private bool hasField63;
+    private int field63_ = 0;
+    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_ = 0L;
+    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_ = 0;
+    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_ = false;
+    public bool HasField205 {
+      get { return hasField205; }
+    }
+    public bool Field205 {
+      get { return field205_; }
+    }
+    
+    public const int Field206FieldNumber = 206;
+    private bool hasField206;
+    private bool field206_ = false;
+    public bool HasField206 {
+      get { return hasField206; }
+    }
+    public bool Field206 {
+      get { return field206_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasField1) {
+        output.WriteString(1, Field1);
+      }
+      if (HasField2) {
+        output.WriteBytes(2, Field2);
+      }
+      if (HasField3) {
+        output.WriteInt64(3, Field3);
+      }
+      if (HasField4) {
+        output.WriteInt64(4, Field4);
+      }
+      if (HasField6) {
+        output.WriteString(6, Field6);
+      }
+      foreach (global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 element in Group1List) {
+        output.WriteGroup(10, element);
+      }
+      if (HasField21) {
+        output.WriteInt32(21, Field21);
+      }
+      if (HasField25) {
+        output.WriteFloat(25, Field25);
+      }
+      if (HasField30) {
+        output.WriteInt64(30, Field30);
+      }
+      if (HasField63) {
+        output.WriteInt32(63, Field63);
+      }
+      if (HasField71) {
+        output.WriteInt32(71, Field71);
+      }
+      if (HasField75) {
+        output.WriteBool(75, Field75);
+      }
+      if (HasField109) {
+        output.WriteInt32(109, Field109);
+      }
+      if (field127_.Count > 0) {
+        foreach (string element in field127_) {
+          output.WriteString(127, element);
+        }
+      }
+      if (field128_.Count > 0) {
+        foreach (string element in field128_) {
+          output.WriteString(128, element);
+        }
+      }
+      if (HasField129) {
+        output.WriteInt32(129, Field129);
+      }
+      if (field130_.Count > 0) {
+        foreach (long element in field130_) {
+          output.WriteInt64(130, element);
+        }
+      }
+      if (HasField131) {
+        output.WriteInt64(131, Field131);
+      }
+      if (HasField205) {
+        output.WriteBool(205, Field205);
+      }
+      if (HasField206) {
+        output.WriteBool(206, Field206);
+      }
+      if (HasField210) {
+        output.WriteInt32(210, Field210);
+      }
+      if (HasField211) {
+        output.WriteInt32(211, Field211);
+      }
+      if (HasField212) {
+        output.WriteInt32(212, Field212);
+      }
+      if (HasField213) {
+        output.WriteInt32(213, Field213);
+      }
+      if (HasField216) {
+        output.WriteInt32(216, Field216);
+      }
+      if (HasField217) {
+        output.WriteInt32(217, Field217);
+      }
+      if (HasField218) {
+        output.WriteInt32(218, Field218);
+      }
+      if (HasField220) {
+        output.WriteInt32(220, Field220);
+      }
+      if (HasField221) {
+        output.WriteInt32(221, Field221);
+      }
+      if (HasField222) {
+        output.WriteFloat(222, Field222);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SpeedMessage2 ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SpeedMessage2 result = new SpeedMessage2();
+      
+      protected override SpeedMessage2 MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SpeedMessage2();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        result.group1_.MakeReadOnly();
+        result.field128_.MakeReadOnly();
+        result.field127_.MakeReadOnly();
+        result.field130_.MakeReadOnly();
+        SpeedMessage2 returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        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) {
+          base.AddRange(other.group1_, result.group1_);
+        }
+        if (other.field128_.Count != 0) {
+          base.AddRange(other.field128_, result.field128_);
+        }
+        if (other.HasField131) {
+          Field131 = other.Field131;
+        }
+        if (other.field127_.Count != 0) {
+          base.AddRange(other.field127_, result.field127_);
+        }
+        if (other.HasField129) {
+          Field129 = other.Field129;
+        }
+        if (other.field130_.Count != 0) {
+          base.AddRange(other.field130_, result.field130_);
+        }
+        if (other.HasField205) {
+          Field205 = other.Field205;
+        }
+        if (other.HasField206) {
+          Field206 = other.Field206;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 10: {
+              Field1 = input.ReadString();
+              break;
+            }
+            case 18: {
+              Field2 = input.ReadBytes();
+              break;
+            }
+            case 24: {
+              Field3 = input.ReadInt64();
+              break;
+            }
+            case 32: {
+              Field4 = input.ReadInt64();
+              break;
+            }
+            case 50: {
+              Field6 = input.ReadString();
+              break;
+            }
+            case 83: {
+              global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.CreateBuilder();
+              input.ReadGroup(10, subBuilder, extensionRegistry);
+              AddGroup1(subBuilder.BuildPartial());
+              break;
+            }
+            case 168: {
+              Field21 = input.ReadInt32();
+              break;
+            }
+            case 205: {
+              Field25 = input.ReadFloat();
+              break;
+            }
+            case 240: {
+              Field30 = input.ReadInt64();
+              break;
+            }
+            case 504: {
+              Field63 = input.ReadInt32();
+              break;
+            }
+            case 568: {
+              Field71 = input.ReadInt32();
+              break;
+            }
+            case 600: {
+              Field75 = input.ReadBool();
+              break;
+            }
+            case 872: {
+              Field109 = input.ReadInt32();
+              break;
+            }
+            case 1018: {
+              AddField127(input.ReadString());
+              break;
+            }
+            case 1026: {
+              AddField128(input.ReadString());
+              break;
+            }
+            case 1032: {
+              Field129 = input.ReadInt32();
+              break;
+            }
+            case 1040: {
+              AddField130(input.ReadInt64());
+              break;
+            }
+            case 1048: {
+              Field131 = input.ReadInt64();
+              break;
+            }
+            case 1640: {
+              Field205 = input.ReadBool();
+              break;
+            }
+            case 1648: {
+              Field206 = input.ReadBool();
+              break;
+            }
+            case 1680: {
+              Field210 = input.ReadInt32();
+              break;
+            }
+            case 1688: {
+              Field211 = input.ReadInt32();
+              break;
+            }
+            case 1696: {
+              Field212 = input.ReadInt32();
+              break;
+            }
+            case 1704: {
+              Field213 = input.ReadInt32();
+              break;
+            }
+            case 1728: {
+              Field216 = input.ReadInt32();
+              break;
+            }
+            case 1736: {
+              Field217 = input.ReadInt32();
+              break;
+            }
+            case 1744: {
+              Field218 = input.ReadInt32();
+              break;
+            }
+            case 1760: {
+              Field220 = input.ReadInt32();
+              break;
+            }
+            case 1768: {
+              Field221 = input.ReadInt32();
+              break;
+            }
+            case 1781: {
+              Field222 = input.ReadFloat();
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      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");
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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) {
+        result.hasField4 = true;
+        result.field4_ = value;
+        return this;
+      }
+      public Builder ClearField4() {
+        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) {
+        result.hasField30 = true;
+        result.field30_ = value;
+        return this;
+      }
+      public Builder ClearField30() {
+        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) {
+        result.hasField75 = true;
+        result.field75_ = value;
+        return this;
+      }
+      public Builder ClearField75() {
+        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");
+        result.hasField6 = true;
+        result.field6_ = value;
+        return this;
+      }
+      public Builder ClearField6() {
+        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");
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField21 = true;
+        result.field21_ = value;
+        return this;
+      }
+      public Builder ClearField21() {
+        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) {
+        result.hasField71 = true;
+        result.field71_ = value;
+        return this;
+      }
+      public Builder ClearField71() {
+        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) {
+        result.hasField25 = true;
+        result.field25_ = value;
+        return this;
+      }
+      public Builder ClearField25() {
+        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) {
+        result.hasField109 = true;
+        result.field109_ = value;
+        return this;
+      }
+      public Builder ClearField109() {
+        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) {
+        result.hasField210 = true;
+        result.field210_ = value;
+        return this;
+      }
+      public Builder ClearField210() {
+        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) {
+        result.hasField211 = true;
+        result.field211_ = value;
+        return this;
+      }
+      public Builder ClearField211() {
+        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) {
+        result.hasField212 = true;
+        result.field212_ = value;
+        return this;
+      }
+      public Builder ClearField212() {
+        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) {
+        result.hasField213 = true;
+        result.field213_ = value;
+        return this;
+      }
+      public Builder ClearField213() {
+        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) {
+        result.hasField216 = true;
+        result.field216_ = value;
+        return this;
+      }
+      public Builder ClearField216() {
+        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) {
+        result.hasField217 = true;
+        result.field217_ = value;
+        return this;
+      }
+      public Builder ClearField217() {
+        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) {
+        result.hasField218 = true;
+        result.field218_ = value;
+        return this;
+      }
+      public Builder ClearField218() {
+        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) {
+        result.hasField220 = true;
+        result.field220_ = value;
+        return this;
+      }
+      public Builder ClearField220() {
+        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) {
+        result.hasField221 = true;
+        result.field221_ = value;
+        return this;
+      }
+      public Builder ClearField221() {
+        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) {
+        result.hasField222 = true;
+        result.field222_ = value;
+        return this;
+      }
+      public Builder ClearField222() {
+        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) {
+        result.hasField63 = true;
+        result.field63_ = value;
+        return this;
+      }
+      public Builder ClearField63() {
+        result.hasField63 = false;
+        result.field63_ = 0;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> Group1List {
+        get { return result.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");
+        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");
+        result.group1_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.group1_.Add(value);
+        return this;
+      }
+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        result.group1_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> values) {
+        base.AddRange(values, result.group1_);
+        return this;
+      }
+      public Builder ClearGroup1() {
+        result.group1_.Clear();
+        return this;
+      }
+      
+      public pbc::IPopsicleList<string> Field128List {
+        get { return result.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");
+        result.field128_[index] = value;
+        return this;
+      }
+      public Builder AddField128(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.field128_.Add(value);
+        return this;
+      }
+      public Builder AddRangeField128(scg::IEnumerable<string> values) {
+        base.AddRange(values, result.field128_);
+        return this;
+      }
+      public Builder ClearField128() {
+        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) {
+        result.hasField131 = true;
+        result.field131_ = value;
+        return this;
+      }
+      public Builder ClearField131() {
+        result.hasField131 = false;
+        result.field131_ = 0L;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<string> Field127List {
+        get { return result.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");
+        result.field127_[index] = value;
+        return this;
+      }
+      public Builder AddField127(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.field127_.Add(value);
+        return this;
+      }
+      public Builder AddRangeField127(scg::IEnumerable<string> values) {
+        base.AddRange(values, result.field127_);
+        return this;
+      }
+      public Builder ClearField127() {
+        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) {
+        result.hasField129 = true;
+        result.field129_ = value;
+        return this;
+      }
+      public Builder ClearField129() {
+        result.hasField129 = false;
+        result.field129_ = 0;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<long> Field130List {
+        get { return result.field130_; }
+      }
+      public int Field130Count {
+        get { return result.Field130Count; }
+      }
+      public long GetField130(int index) {
+        return result.GetField130(index);
+      }
+      public Builder SetField130(int index, long value) {
+        result.field130_[index] = value;
+        return this;
+      }
+      public Builder AddField130(long value) {
+        result.field130_.Add(value);
+        return this;
+      }
+      public Builder AddRangeField130(scg::IEnumerable<long> values) {
+        base.AddRange(values, result.field130_);
+        return this;
+      }
+      public Builder ClearField130() {
+        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) {
+        result.hasField205 = true;
+        result.field205_ = value;
+        return this;
+      }
+      public Builder ClearField205() {
+        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) {
+        result.hasField206 = true;
+        result.field206_ = value;
+        return this;
+      }
+      public Builder ClearField206() {
+        result.hasField206 = false;
+        result.field206_ = false;
+        return this;
+      }
+    }
+    static SpeedMessage2() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class SpeedMessage2GroupedMessage : pb::GeneratedMessage<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> {
+    private static readonly SpeedMessage2GroupedMessage defaultInstance = new Builder().BuildPartial();
+    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_benchmarks_SpeedMessage2GroupedMessage__Descriptor; }
+    }
+    
+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> InternalFieldAccessors {
+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable; }
+    }
+    
+    public const int Field1FieldNumber = 1;
+    private bool hasField1;
+    private float field1_ = 0F;
+    public bool HasField1 {
+      get { return hasField1; }
+    }
+    public float Field1 {
+      get { return field1_; }
+    }
+    
+    public const int Field2FieldNumber = 2;
+    private bool hasField2;
+    private float field2_ = 0F;
+    public bool HasField2 {
+      get { return hasField2; }
+    }
+    public float Field2 {
+      get { return field2_; }
+    }
+    
+    public const int Field3FieldNumber = 3;
+    private bool hasField3;
+    private float field3_ = 0F;
+    public bool HasField3 {
+      get { return hasField3; }
+    }
+    public float Field3 {
+      get { return field3_; }
+    }
+    
+    public const int Field4FieldNumber = 4;
+    private bool hasField4;
+    private bool field4_ = false;
+    public bool HasField4 {
+      get { return hasField4; }
+    }
+    public bool Field4 {
+      get { return field4_; }
+    }
+    
+    public const int Field5FieldNumber = 5;
+    private bool hasField5;
+    private bool field5_ = false;
+    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_ = false;
+    public bool HasField7 {
+      get { return hasField7; }
+    }
+    public bool Field7 {
+      get { return field7_; }
+    }
+    
+    public const int Field8FieldNumber = 8;
+    private bool hasField8;
+    private float field8_ = 0F;
+    public bool HasField8 {
+      get { return hasField8; }
+    }
+    public float Field8 {
+      get { return field8_; }
+    }
+    
+    public const int Field9FieldNumber = 9;
+    private bool hasField9;
+    private bool field9_ = false;
+    public bool HasField9 {
+      get { return hasField9; }
+    }
+    public bool Field9 {
+      get { return field9_; }
+    }
+    
+    public const int Field10FieldNumber = 10;
+    private bool hasField10;
+    private float field10_ = 0F;
+    public bool HasField10 {
+      get { return hasField10; }
+    }
+    public float Field10 {
+      get { return field10_; }
+    }
+    
+    public const int Field11FieldNumber = 11;
+    private bool hasField11;
+    private long field11_ = 0L;
+    public bool HasField11 {
+      get { return hasField11; }
+    }
+    public long Field11 {
+      get { return field11_; }
+    }
+    
+    public override bool IsInitialized {
+      get {
+        return true;
+      }
+    }
+    
+    public override void WriteTo(pb::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasField1) {
+        output.WriteFloat(1, Field1);
+      }
+      if (HasField2) {
+        output.WriteFloat(2, Field2);
+      }
+      if (HasField3) {
+        output.WriteFloat(3, Field3);
+      }
+      if (HasField4) {
+        output.WriteBool(4, Field4);
+      }
+      if (HasField5) {
+        output.WriteBool(5, Field5);
+      }
+      if (HasField6) {
+        output.WriteBool(6, Field6);
+      }
+      if (HasField7) {
+        output.WriteBool(7, Field7);
+      }
+      if (HasField8) {
+        output.WriteFloat(8, Field8);
+      }
+      if (HasField9) {
+        output.WriteBool(9, Field9);
+      }
+      if (HasField10) {
+        output.WriteFloat(10, Field10);
+      }
+      if (HasField11) {
+        output.WriteInt64(11, Field11);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static SpeedMessage2GroupedMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2GroupedMessage, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      SpeedMessage2GroupedMessage result = new SpeedMessage2GroupedMessage();
+      
+      protected override SpeedMessage2GroupedMessage MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new SpeedMessage2GroupedMessage();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        SpeedMessage2GroupedMessage returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        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::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 13: {
+              Field1 = input.ReadFloat();
+              break;
+            }
+            case 21: {
+              Field2 = input.ReadFloat();
+              break;
+            }
+            case 29: {
+              Field3 = input.ReadFloat();
+              break;
+            }
+            case 32: {
+              Field4 = input.ReadBool();
+              break;
+            }
+            case 40: {
+              Field5 = input.ReadBool();
+              break;
+            }
+            case 48: {
+              Field6 = input.ReadBool();
+              break;
+            }
+            case 56: {
+              Field7 = input.ReadBool();
+              break;
+            }
+            case 69: {
+              Field8 = input.ReadFloat();
+              break;
+            }
+            case 72: {
+              Field9 = input.ReadBool();
+              break;
+            }
+            case 85: {
+              Field10 = input.ReadFloat();
+              break;
+            }
+            case 88: {
+              Field11 = input.ReadInt64();
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      public bool HasField1 {
+        get { return result.HasField1; }
+      }
+      public float Field1 {
+        get { return result.Field1; }
+        set { SetField1(value); }
+      }
+      public Builder SetField1(float value) {
+        result.hasField1 = true;
+        result.field1_ = value;
+        return this;
+      }
+      public Builder ClearField1() {
+        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) {
+        result.hasField2 = true;
+        result.field2_ = value;
+        return this;
+      }
+      public Builder ClearField2() {
+        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) {
+        result.hasField3 = true;
+        result.field3_ = value;
+        return this;
+      }
+      public Builder ClearField3() {
+        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) {
+        result.hasField4 = true;
+        result.field4_ = value;
+        return this;
+      }
+      public Builder ClearField4() {
+        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) {
+        result.hasField5 = true;
+        result.field5_ = value;
+        return this;
+      }
+      public Builder ClearField5() {
+        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) {
+        result.hasField6 = true;
+        result.field6_ = value;
+        return this;
+      }
+      public Builder ClearField6() {
+        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) {
+        result.hasField7 = true;
+        result.field7_ = value;
+        return this;
+      }
+      public Builder ClearField7() {
+        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) {
+        result.hasField8 = true;
+        result.field8_ = value;
+        return this;
+      }
+      public Builder ClearField8() {
+        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) {
+        result.hasField9 = true;
+        result.field9_ = value;
+        return this;
+      }
+      public Builder ClearField9() {
+        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) {
+        result.hasField10 = true;
+        result.field10_ = value;
+        return this;
+      }
+      public Builder ClearField10() {
+        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) {
+        result.hasField11 = true;
+        result.field11_ = value;
+        return this;
+      }
+      public Builder ClearField11() {
+        result.hasField11 = false;
+        result.field11_ = 0L;
+        return this;
+      }
+    }
+    static SpeedMessage2GroupedMessage() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);
+    }
+  }
+  
+  #endregion
+  
+}

+ 1680 - 0
src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs

@@ -0,0 +1,1680 @@
+// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48.  DO NOT EDIT!
+
+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()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  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_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(
+          "CiRleHRlc3QvdW5pdHRlc3RfZXh0cmFzX3htbHRlc3QucHJvdG8SF3Byb3Rv" + 
+          "YnVmX3VuaXR0ZXN0X2V4dHJhGiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29w" + 
+          "dGlvbnMucHJvdG8iVQoMVGVzdFhtbENoaWxkEjUKB29wdGlvbnMYAyADKA4y" + 
+          "JC5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5FbnVtT3B0aW9ucxIOCgZiaW5h" + 
+          "cnkYBCABKAwiEQoPVGVzdFhtbE5vRmllbGRzIrcCCg5UZXN0WG1sTWVzc2Fn" + 
+          "ZRIOCgZudW1iZXIYBiABKAMSDwoHbnVtYmVycxgCIAMoBRIMCgR0ZXh0GAMg" + 
+          "ASgJEhIKCXRleHRsaW5lcxi8BSADKAkSDQoFdmFsaWQYBSABKAgSNAoFY2hp" + 
+          "bGQYASABKAsyJS5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1sQ2hp" + 
+          "bGQSQwoIY2hpbGRyZW4YkQMgAygKMjAucHJvdG9idWZfdW5pdHRlc3RfZXh0" + 
+          "cmEuVGVzdFhtbE1lc3NhZ2UuQ2hpbGRyZW4aUQoIQ2hpbGRyZW4SNQoHb3B0" + 
+          "aW9ucxgDIAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLkVudW1PcHRp" + 
+          "b25zEg4KBmJpbmFyeRgEIAEoDCoFCGQQyAEiIgoQVGVzdFhtbEV4dGVuc2lv" + 
+          "bhIOCgZudW1iZXIYASACKAUqKgoLRW51bU9wdGlvbnMSBwoDT05FEAASBwoD" + 
+          "VFdPEAESCQoFVEhSRUUQAjplCg5leHRlbnNpb25fZW51bRInLnByb3RvYnVm" + 
+          "X3VuaXR0ZXN0X2V4dHJhLlRlc3RYbWxNZXNzYWdlGGUgASgOMiQucHJvdG9i" + 
+          "dWZfdW5pdHRlc3RfZXh0cmEuRW51bU9wdGlvbnM6PwoOZXh0ZW5zaW9uX3Rl" + 
+          "eHQSJy5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1sTWVzc2FnZRhm" + 
+          "IAEoCTpFChBleHRlbnNpb25fbnVtYmVyEicucHJvdG9idWZfdW5pdHRlc3Rf" + 
+          "ZXh0cmEuVGVzdFhtbE1lc3NhZ2UYZyADKAVCAhABOm4KEWV4dGVuc2lvbl9t" + 
+          "ZXNzYWdlEicucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdFhtbE1lc3Nh" + 
+          "Z2UYxwEgASgLMikucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdFhtbEV4" + 
+          "dGVuc2lvbkJMSAHCPkcKIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFBy" + 
+          "b3RvcxIiVW5pdFRlc3RYbWxTZXJpYWxpemVyVGVzdFByb3RvRmlsZQ==");
+      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_TestXmlMessage__Descriptor = Descriptor.MessageTypes[2];
+        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[3];
+        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
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public enum EnumOptions {
+    ONE = 0,
+    TWO = 1,
+    THREE = 2,
+  }
+  
+  #endregion
+  
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class TestXmlChild : pb::GeneratedMessage<TestXmlChild, TestXmlChild.Builder> {
+    private static readonly TestXmlChild defaultInstance = new Builder().BuildPartial();
+    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::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (options_.Count > 0) {
+        foreach (int element in options_) {
+          output.WriteEnum(3, element);
+        }
+      }
+      if (HasBinary) {
+        output.WriteBytes(4, Binary);
+      }
+      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;
+          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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static TestXmlChild ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlChild, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      TestXmlChild result = new TestXmlChild();
+      
+      protected override TestXmlChild MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new TestXmlChild();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        result.options_.MakeReadOnly();
+        TestXmlChild returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        if (other.options_.Count != 0) {
+          base.AddRange(other.options_, result.options_);
+        }
+        if (other.HasBinary) {
+          Binary = other.Binary;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 24: {
+              int rawValue = input.ReadEnum();
+              if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.EnumOptions), rawValue)) {
+                if (unknownFields == null) {
+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                }
+                unknownFields.MergeVarintField(3, (ulong) rawValue);
+              } else {
+                AddOptions((global::Google.ProtocolBuffers.TestProtos.EnumOptions) rawValue);
+              }
+              break;
+            }
+            case 34: {
+              Binary = input.ReadBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {
+        get { return result.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) {
+        result.options_[index] = value;
+        return this;
+      }
+      public Builder AddOptions(global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {
+        result.options_.Add(value);
+        return this;
+      }
+      public Builder AddRangeOptions(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.EnumOptions> values) {
+        base.AddRange(values, result.options_);
+        return this;
+      }
+      public Builder ClearOptions() {
+        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");
+        result.hasBinary = true;
+        result.binary_ = value;
+        return this;
+      }
+      public Builder ClearBinary() {
+        result.hasBinary = false;
+        result.binary_ = pb::ByteString.Empty;
+        return this;
+      }
+    }
+    static TestXmlChild() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class TestXmlNoFields : pb::GeneratedMessage<TestXmlNoFields, TestXmlNoFields.Builder> {
+    private static readonly TestXmlNoFields defaultInstance = new Builder().BuildPartial();
+    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::CodedOutputStream output) {
+      int size = SerializedSize;
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static TestXmlNoFields ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlNoFields, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      TestXmlNoFields result = new TestXmlNoFields();
+      
+      protected override TestXmlNoFields MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new TestXmlNoFields();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        TestXmlNoFields returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+          }
+        }
+      }
+      
+    }
+    static TestXmlNoFields() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class TestXmlMessage : pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder> {
+    private static readonly TestXmlMessage defaultInstance = new Builder().BuildPartial();
+    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()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public static class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+      public sealed partial class Children : pb::GeneratedMessage<Children, Children.Builder> {
+        private static readonly Children defaultInstance = new Builder().BuildPartial();
+        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::CodedOutputStream output) {
+          int size = SerializedSize;
+          if (options_.Count > 0) {
+            foreach (int element in options_) {
+              output.WriteEnum(3, element);
+            }
+          }
+          if (HasBinary) {
+            output.WriteBytes(4, Binary);
+          }
+          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;
+              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::CodedInputStream input) {
+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+        }
+        public static Children ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+        }
+        public 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 (Builder) new Builder().MergeFrom(prototype);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+        public sealed partial class Builder : pb::GeneratedBuilder<Children, Builder> {
+          protected override Builder ThisBuilder {
+            get { return this; }
+          }
+          public Builder() {}
+          
+          Children result = new Children();
+          
+          protected override Children MessageBeingBuilt {
+            get { return result; }
+          }
+          
+          public override Builder Clear() {
+            result = new Children();
+            return this;
+          }
+          
+          public override Builder Clone() {
+            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 (result == null) {
+              throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+            }
+            result.options_.MakeReadOnly();
+            Children returnMe = result;
+            result = null;
+            return returnMe;
+          }
+          
+          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;
+            if (other.options_.Count != 0) {
+              base.AddRange(other.options_, result.options_);
+            }
+            if (other.HasBinary) {
+              Binary = other.Binary;
+            }
+            this.MergeUnknownFields(other.UnknownFields);
+            return this;
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input) {
+            return MergeFrom(input, pb::ExtensionRegistry.Empty);
+          }
+          
+          public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+            pb::UnknownFieldSet.Builder unknownFields = null;
+            while (true) {
+              uint tag = input.ReadTag();
+              switch (tag) {
+                case 0: {
+                  if (unknownFields != null) {
+                    this.UnknownFields = unknownFields.Build();
+                  }
+                  return this;
+                }
+                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);
+                  break;
+                }
+                case 24: {
+                  int rawValue = input.ReadEnum();
+                  if (!global::System.Enum.IsDefined(typeof(global::Google.ProtocolBuffers.TestProtos.EnumOptions), rawValue)) {
+                    if (unknownFields == null) {
+                      unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+                    }
+                    unknownFields.MergeVarintField(3, (ulong) rawValue);
+                  } else {
+                    AddOptions((global::Google.ProtocolBuffers.TestProtos.EnumOptions) rawValue);
+                  }
+                  break;
+                }
+                case 34: {
+                  Binary = input.ReadBytes();
+                  break;
+                }
+              }
+            }
+          }
+          
+          
+          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {
+            get { return result.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) {
+            result.options_[index] = value;
+            return this;
+          }
+          public Builder AddOptions(global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {
+            result.options_.Add(value);
+            return this;
+          }
+          public Builder AddRangeOptions(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.EnumOptions> values) {
+            base.AddRange(values, result.options_);
+            return this;
+          }
+          public Builder ClearOptions() {
+            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");
+            result.hasBinary = true;
+            result.binary_ = value;
+            return this;
+          }
+          public Builder ClearBinary() {
+            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_ = 0L;
+    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_ = false;
+    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_ = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance;
+    public bool HasChild {
+      get { return hasChild; }
+    }
+    public global::Google.ProtocolBuffers.TestProtos.TestXmlChild Child {
+      get { return child_; }
+    }
+    
+    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::CodedOutputStream output) {
+      int size = SerializedSize;
+      pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
+      if (HasChild) {
+        output.WriteMessage(1, Child);
+      }
+      if (numbers_.Count > 0) {
+        foreach (int element in numbers_) {
+          output.WriteInt32(2, element);
+        }
+      }
+      if (HasText) {
+        output.WriteString(3, Text);
+      }
+      if (HasValid) {
+        output.WriteBool(5, Valid);
+      }
+      if (HasNumber) {
+        output.WriteInt64(6, Number);
+      }
+      extensionWriter.WriteUntil(200, output);
+      foreach (global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children element in ChildrenList) {
+        output.WriteGroup(401, element);
+      }
+      if (textlines_.Count > 0) {
+        foreach (string element in textlines_) {
+          output.WriteString(700, element);
+        }
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static TestXmlMessage ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::ExtendableBuilder<TestXmlMessage, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      TestXmlMessage result = new TestXmlMessage();
+      
+      protected override TestXmlMessage MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new TestXmlMessage();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        result.numbers_.MakeReadOnly();
+        result.textlines_.MakeReadOnly();
+        result.children_.MakeReadOnly();
+        TestXmlMessage returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        if (other.HasNumber) {
+          Number = other.Number;
+        }
+        if (other.numbers_.Count != 0) {
+          base.AddRange(other.numbers_, result.numbers_);
+        }
+        if (other.HasText) {
+          Text = other.Text;
+        }
+        if (other.textlines_.Count != 0) {
+          base.AddRange(other.textlines_, result.textlines_);
+        }
+        if (other.HasValid) {
+          Valid = other.Valid;
+        }
+        if (other.HasChild) {
+          MergeChild(other.Child);
+        }
+        if (other.children_.Count != 0) {
+          base.AddRange(other.children_, result.children_);
+        }
+          this.MergeExtensionFields(other);
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 10: {
+              global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.CreateBuilder();
+              if (HasChild) {
+                subBuilder.MergeFrom(Child);
+              }
+              input.ReadMessage(subBuilder, extensionRegistry);
+              Child = subBuilder.BuildPartial();
+              break;
+            }
+            case 16: {
+              AddNumbers(input.ReadInt32());
+              break;
+            }
+            case 26: {
+              Text = input.ReadString();
+              break;
+            }
+            case 40: {
+              Valid = input.ReadBool();
+              break;
+            }
+            case 48: {
+              Number = input.ReadInt64();
+              break;
+            }
+            case 3211: {
+              global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.CreateBuilder();
+              input.ReadGroup(401, subBuilder, extensionRegistry);
+              AddChildren(subBuilder.BuildPartial());
+              break;
+            }
+            case 5602: {
+              AddTextlines(input.ReadString());
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      public bool HasNumber {
+        get { return result.HasNumber; }
+      }
+      public long Number {
+        get { return result.Number; }
+        set { SetNumber(value); }
+      }
+      public Builder SetNumber(long value) {
+        result.hasNumber = true;
+        result.number_ = value;
+        return this;
+      }
+      public Builder ClearNumber() {
+        result.hasNumber = false;
+        result.number_ = 0L;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<int> NumbersList {
+        get { return result.numbers_; }
+      }
+      public int NumbersCount {
+        get { return result.NumbersCount; }
+      }
+      public int GetNumbers(int index) {
+        return result.GetNumbers(index);
+      }
+      public Builder SetNumbers(int index, int value) {
+        result.numbers_[index] = value;
+        return this;
+      }
+      public Builder AddNumbers(int value) {
+        result.numbers_.Add(value);
+        return this;
+      }
+      public Builder AddRangeNumbers(scg::IEnumerable<int> values) {
+        base.AddRange(values, result.numbers_);
+        return this;
+      }
+      public Builder ClearNumbers() {
+        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");
+        result.hasText = true;
+        result.text_ = value;
+        return this;
+      }
+      public Builder ClearText() {
+        result.hasText = false;
+        result.text_ = "";
+        return this;
+      }
+      
+      public pbc::IPopsicleList<string> TextlinesList {
+        get { return result.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");
+        result.textlines_[index] = value;
+        return this;
+      }
+      public Builder AddTextlines(string value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.textlines_.Add(value);
+        return this;
+      }
+      public Builder AddRangeTextlines(scg::IEnumerable<string> values) {
+        base.AddRange(values, result.textlines_);
+        return this;
+      }
+      public Builder ClearTextlines() {
+        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) {
+        result.hasValid = true;
+        result.valid_ = value;
+        return this;
+      }
+      public Builder ClearValid() {
+        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");
+        result.hasChild = true;
+        result.child_ = value;
+        return this;
+      }
+      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        result.hasChild = true;
+        result.child_ = builderForValue.Build();
+        return this;
+      }
+      public Builder MergeChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        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() {
+        result.hasChild = false;
+        result.child_ = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance;
+        return this;
+      }
+      
+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> ChildrenList {
+        get { return result.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");
+        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");
+        result.children_[index] = builderForValue.Build();
+        return this;
+      }
+      public Builder AddChildren(global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children value) {
+        pb::ThrowHelper.ThrowIfNull(value, "value");
+        result.children_.Add(value);
+        return this;
+      }
+      public Builder AddChildren(global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder builderForValue) {
+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+        result.children_.Add(builderForValue.Build());
+        return this;
+      }
+      public Builder AddRangeChildren(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> values) {
+        base.AddRange(values, result.children_);
+        return this;
+      }
+      public Builder ClearChildren() {
+        result.children_.Clear();
+        return this;
+      }
+    }
+    static TestXmlMessage() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);
+    }
+  }
+  
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+  public sealed partial class TestXmlExtension : pb::GeneratedMessage<TestXmlExtension, TestXmlExtension.Builder> {
+    private static readonly TestXmlExtension defaultInstance = new Builder().BuildPartial();
+    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_ = 0;
+    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::CodedOutputStream output) {
+      int size = SerializedSize;
+      if (HasNumber) {
+        output.WriteInt32(1, Number);
+      }
+      UnknownFields.WriteTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public override int SerializedSize {
+      get {
+        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::CodedInputStream input) {
+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+    }
+    public static TestXmlExtension ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    }
+    public 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 (Builder) new Builder().MergeFrom(prototype);
+    }
+    
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlExtension, Builder> {
+      protected override Builder ThisBuilder {
+        get { return this; }
+      }
+      public Builder() {}
+      
+      TestXmlExtension result = new TestXmlExtension();
+      
+      protected override TestXmlExtension MessageBeingBuilt {
+        get { return result; }
+      }
+      
+      public override Builder Clear() {
+        result = new TestXmlExtension();
+        return this;
+      }
+      
+      public override Builder Clone() {
+        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 (result == null) {
+          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
+        }
+        TestXmlExtension returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      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;
+        if (other.HasNumber) {
+          Number = other.Number;
+        }
+        this.MergeUnknownFields(other.UnknownFields);
+        return this;
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input) {
+        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      }
+      
+      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+        pb::UnknownFieldSet.Builder unknownFields = null;
+        while (true) {
+          uint tag = input.ReadTag();
+          switch (tag) {
+            case 0: {
+              if (unknownFields != null) {
+                this.UnknownFields = unknownFields.Build();
+              }
+              return this;
+            }
+            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);
+              break;
+            }
+            case 8: {
+              Number = input.ReadInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      public bool HasNumber {
+        get { return result.HasNumber; }
+      }
+      public int Number {
+        get { return result.Number; }
+        set { SetNumber(value); }
+      }
+      public Builder SetNumber(int value) {
+        result.hasNumber = true;
+        result.number_ = value;
+        return this;
+      }
+      public Builder ClearNumber() {
+        result.hasNumber = false;
+        result.number_ = 0;
+        return this;
+      }
+    }
+    static TestXmlExtension() {
+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);
+    }
+  }
+  
+  #endregion
+  
+}

+ 2 - 2
src/ProtocolBuffers.Test/TextFormatTest.cs

@@ -404,8 +404,8 @@ namespace Google.ProtocolBuffers
                 "1:2: Extension \"nosuchext\" not found in the ExtensionRegistry.",
                 "[nosuchext]: 123");
             AssertParseError(
-                "1:20: Extension \"protobuf_unittest.optional_int32_extension\" does " +
-                "not extend message type \"protobuf_unittest.TestAllTypes\".",
+                "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 " +

+ 155 - 157
src/ProtocolBuffers.sln

@@ -1,157 +1,155 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-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
-		..\ProtocolBuffers.build = ..\ProtocolBuffers.build
-		..\todo.txt = ..\todo.txt
-	EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unittest", "unittest", "{C8D3015A-EA39-4F03-AEEC-3FF1F2087A12}"
-	ProjectSection(SolutionItems) = preProject
-		..\..\..\DotNet\ProtoFiles\Test\Protos\SampleComplex.proto = ..\..\..\DotNet\ProtoFiles\Test\Protos\SampleComplex.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_lite.proto = ..\protos\extest\unittest_extras_lite.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\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
-	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
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug_Silverlight2|Any CPU = Debug_Silverlight2|Any CPU
-		Debug|Any CPU = Debug|Any CPU
-		Release_Silverlight2|Any CPU = Release_Silverlight2|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight2|Any CPU.ActiveCfg = Debug_Silverlight2|Any CPU
-		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight2|Any CPU.Build.0 = Debug_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Release_Silverlight2|Any CPU
-		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release_Silverlight2|Any CPU.Build.0 = Release_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{C268DA4C-4004-47DA-AF23-44C983281A68}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{C268DA4C-4004-47DA-AF23-44C983281A68}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug_Silverlight2|Any CPU
-		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight2|Any CPU.Build.0 = Debug_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Release_Silverlight2|Any CPU
-		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release_Silverlight2|Any CPU.Build.0 = Release_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight2|Any CPU.Build.0 = 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
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(NestedProjects) = preSolution
-		{C8D3015A-EA39-4F03-AEEC-3FF1F2087A12} = {1F896D5C-5FC2-4671-9216-781CB8187EC7}
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+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
+	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_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\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
+	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\build35.bat = ..\build\build35.bat
+		..\build\BuildAll.bat = ..\build\BuildAll.bat
+		..\build\BuildSilverlight2.bat = ..\build\BuildSilverlight2.bat
+		..\build\Common.targets = ..\build\Common.targets
+		..\build\GenerateCompletePackage.bat = ..\build\GenerateCompletePackage.bat
+		..\build\GenerateReleasePackage.bat = ..\build\GenerateReleasePackage.bat
+		..\build\PublishRelease.bat = ..\build\PublishRelease.bat
+		..\build\RunBenchmarks.bat = ..\build\RunBenchmarks.bat
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug_Silverlight2|Any CPU = Debug_Silverlight2|Any CPU
+		Debug|Any CPU = Debug|Any CPU
+		Release_Silverlight2|Any CPU = Release_Silverlight2|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight2|Any CPU.ActiveCfg = Debug_Silverlight2|Any CPU
+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight2|Any CPU.Build.0 = Debug_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Release_Silverlight2|Any CPU
+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release_Silverlight2|Any CPU.Build.0 = Release_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Debug_Silverlight2|Any CPU
+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight2|Any CPU.Build.0 = Debug_Silverlight2|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_Silverlight2|Any CPU.ActiveCfg = Release_Silverlight2|Any CPU
+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release_Silverlight2|Any CPU.Build.0 = Release_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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_Silverlight2|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
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{C8D3015A-EA39-4F03-AEEC-3FF1F2087A12} = {1F896D5C-5FC2-4671-9216-781CB8187EC7}
+	EndGlobalSection
+EndGlobal

+ 6 - 1
src/ProtocolBuffers/ByteString.cs

@@ -91,7 +91,12 @@ namespace Google.ProtocolBuffers
 
         public byte[] ToByteArray()
         {
-            return (byte[]) bytes.Clone();
+            return (byte[])bytes.Clone();
+        }
+
+        public string ToBase64()
+        {
+            return Convert.ToBase64String(bytes);
         }
 
         /// <summary>

+ 1 - 1
src/ProtocolBuffers/ExtensionInfo.cs

@@ -75,7 +75,7 @@ namespace Google.ProtocolBuffers
 
         object IGeneratedExtensionLite.ContainingType
         {
-            get { return Descriptor; }
+            get { return Descriptor.ContainingType; }
         }
 
         IMessageLite IGeneratedExtensionLite.MessageDefaultInstance

+ 19 - 38
src/ProtocolBuffers/ExtensionRegistry.cs

@@ -93,53 +93,27 @@ namespace Google.ProtocolBuffers
     /// </remarks>
     public sealed partial class ExtensionRegistry
     {
-#if !LITE
-        private static readonly ExtensionRegistry empty = new ExtensionRegistry(
-            new Dictionary<string, ExtensionInfo>(),
-            new Dictionary<ExtensionIntPair, IGeneratedExtensionLite>(),
-            true);
-
-        private readonly IDictionary<string, ExtensionInfo> extensionsByName;
-
-        private ExtensionRegistry(IDictionary<String, ExtensionInfo> extensionsByName,
-                                  IDictionary<ExtensionIntPair, IGeneratedExtensionLite> extensionsByNumber,
-                                  bool readOnly)
-            : this(extensionsByNumber, readOnly)
-        {
-            this.extensionsByName = extensionsByName;
-        }
-
-        /// <summary>
-        /// Construct a new, empty instance.
-        /// </summary>
-        public static ExtensionRegistry CreateInstance()
-        {
-            return new ExtensionRegistry(new Dictionary<string, ExtensionInfo>(),
-                                         new Dictionary<ExtensionIntPair, IGeneratedExtensionLite>(), false);
-        }
-
-        public ExtensionRegistry AsReadOnly()
-        {
-            return new ExtensionRegistry(extensionsByName, extensionsByNumber, true);
-        }
-#endif
-
         /// <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
             {
-                ExtensionInfo ret;
-                extensionsByName.TryGetValue(fullName, out ret);
-                return ret;
+                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.
@@ -154,6 +128,12 @@ namespace Google.ProtocolBuffers
             }
         }
 
+        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>
@@ -210,9 +190,8 @@ namespace Google.ProtocolBuffers
                                             + "regular (non-extension) field.");
             }
 
-            extensionsByName[extension.Descriptor.FullName] = extension;
-            extensionsByNumber[new ExtensionIntPair(extension.Descriptor.ContainingType,
-                                                    extension.Descriptor.FieldNumber)] = extension;
+            IGeneratedExtensionLite liteExtension = extension;
+            Add(liteExtension);
 
             FieldDescriptor field = extension.Descriptor;
             if (field.ContainingType.Options.MessageSetWireFormat
@@ -223,7 +202,9 @@ namespace Google.ProtocolBuffers
                 // 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.
-                extensionsByName[field.MessageType.FullName] = extension;
+                Dictionary<string, IGeneratedExtensionLite> map;
+                if (extensionsByName.TryGetValue(liteExtension.ContainingType, out map))
+                    map[field.MessageType.FullName] = extension;
             }
         }
     }

+ 38 - 19
src/ProtocolBuffers/ExtensionRegistryLite.cs

@@ -36,6 +36,7 @@
 
 using System.Collections.Generic;
 using System;
+using Google.ProtocolBuffers.Descriptors;
 
 namespace Google.ProtocolBuffers
 {
@@ -92,37 +93,39 @@ namespace Google.ProtocolBuffers
     /// </remarks>
     public sealed partial class ExtensionRegistry
     {
-        private readonly IDictionary<ExtensionIntPair, IGeneratedExtensionLite> extensionsByNumber;
+        class ExtensionByNameMap : Dictionary<object, Dictionary<string, IGeneratedExtensionLite>> { }
+        class ExtensionByIdMap : Dictionary<ExtensionIntPair, IGeneratedExtensionLite> { }
+
+        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(IDictionary<ExtensionIntPair, IGeneratedExtensionLite> extensionsByNumber,
-                                  bool readOnly)
+        private ExtensionRegistry(ExtensionByNameMap byName, ExtensionByIdMap byNumber, bool readOnly)
         {
-            this.extensionsByNumber = extensionsByNumber;
+            this.extensionsByName = byName;
+            this.extensionsByNumber = byNumber;
             this.readOnly = readOnly;
         }
 
-#if LITE
-        private static readonly ExtensionRegistry empty = new ExtensionRegistry(
-            new Dictionary<ExtensionIntPair, IGeneratedExtensionLite>(),
-            true);
-
         /// <summary>
         /// Construct a new, empty instance.
         /// </summary>
         public static ExtensionRegistry CreateInstance()
         {
-            return new ExtensionRegistry(
-                new Dictionary<ExtensionIntPair, IGeneratedExtensionLite>(), false);
+            return new ExtensionRegistry(new ExtensionByNameMap(), new ExtensionByIdMap(), false);
         }
 
         public ExtensionRegistry AsReadOnly()
         {
-            return new ExtensionRegistry(extensionsByNumber, true);
+            return new ExtensionRegistry(extensionsByName, extensionsByNumber, true);
         }
 
-#endif
-
         /// <summary>
         /// Get the unmodifiable singleton empty instance.
         /// </summary>
@@ -145,6 +148,18 @@ namespace Google.ProtocolBuffers
             }
         }
 
+        public IGeneratedExtensionLite FindByName(IMessageLite defaultInstanceOfType, string fieldName)
+        { return FindExtensionByName(defaultInstanceOfType, fieldName); }
+
+        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>
@@ -154,9 +169,13 @@ namespace Google.ProtocolBuffers
             {
                 throw new InvalidOperationException("Cannot add entries to a read-only extension registry");
             }
-            extensionsByNumber.Add(
-                new ExtensionIntPair(extension.ContainingType, extension.Number),
-                extension);
+            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>
@@ -176,7 +195,7 @@ namespace Google.ProtocolBuffers
 
             public override int GetHashCode()
             {
-                return msgType.GetHashCode()*((1 << 16) - 1) + number;
+                return msgType.GetHashCode() * ((1 << 16) - 1) + number;
             }
 
             public override bool Equals(object obj)
@@ -185,7 +204,7 @@ namespace Google.ProtocolBuffers
                 {
                     return false;
                 }
-                return Equals((ExtensionIntPair) obj);
+                return Equals((ExtensionIntPair)obj);
             }
 
             public bool Equals(ExtensionIntPair other)

+ 1 - 0
src/ProtocolBuffers/FieldSet.cs

@@ -50,6 +50,7 @@ namespace Google.ProtocolBuffers
         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; }

+ 12 - 0
src/ProtocolBuffers/GeneratedExtensionLite.cs

@@ -74,6 +74,18 @@ namespace Google.ProtocolBuffers
             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; }

+ 11 - 3
src/ProtocolBuffers/TextFormat.cs

@@ -166,14 +166,22 @@ namespace Google.ProtocolBuffers
         {
             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", CultureInfo.InvariantCulture));
+                    break;
+                case FieldType.Double:
+                    generator.Print(((double)value).ToString("r", CultureInfo.InvariantCulture));
+                    break;
+
                 case FieldType.Int32:
                 case FieldType.Int64:
                 case FieldType.SInt32:
                 case FieldType.SInt64:
                 case FieldType.SFixed32:
                 case FieldType.SFixed64:
-                case FieldType.Float:
-                case FieldType.Double:
                 case FieldType.UInt32:
                 case FieldType.UInt64:
                 case FieldType.Fixed32:
@@ -670,7 +678,7 @@ namespace Google.ProtocolBuffers
                     name.Append(tokenizer.ConsumeIdentifier());
                 }
 
-                extension = extensionRegistry[name.ToString()];
+                extension = extensionRegistry.FindByName(type, name.ToString());
 
                 if (extension == null)
                 {

+ 1 - 5
src/ProtocolBuffers/WireFormat.cs

@@ -35,12 +35,8 @@
 #endregion
 
 using System;
-
-#if !LITE
 using Google.ProtocolBuffers.Descriptors;
 
-#endif
-
 namespace Google.ProtocolBuffers
 {
     /// <summary>
@@ -146,6 +142,7 @@ namespace Google.ProtocolBuffers
             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.
@@ -190,6 +187,5 @@ namespace Google.ProtocolBuffers
                     throw new ArgumentOutOfRangeException("No such field type");
             }
         }
-#endif
     }
 }

+ 3 - 19
src/ProtocolBuffers2008.sln

@@ -10,14 +10,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "proto", "proto", "{1F896D5C
 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_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
@@ -82,59 +84,45 @@ Global
 		{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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{C268DA4C-4004-47DA-AF23-44C983281A68}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{C268DA4C-4004-47DA-AF23-44C983281A68}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug_Silverlight2|Any CPU
@@ -146,19 +134,15 @@ Global
 		{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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Debug|Any CPU
-		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight2|Any CPU.Build.0 = 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_Silverlight2|Any CPU.ActiveCfg = Release|Any CPU
-		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight2|Any CPU.Build.0 = 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
 	EndGlobalSection

+ 41 - 1
src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs

@@ -1,4 +1,4 @@
-// Generated by ProtoGen, Version=0.9.0.0, Culture=neutral, PublicKeyToken=8fd7408b07f8d2cd.  DO NOT EDIT!
+// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48.  DO NOT EDIT!
 
 using pb = global::Google.ProtocolBuffers;
 using pbc = global::Google.ProtocolBuffers.Collections;
@@ -6,6 +6,9 @@ using pbd = global::Google.ProtocolBuffers.Descriptors;
 using scg = global::System.Collections.Generic;
 namespace Google.ProtocolBuffers.TestProtos {
   
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
   public static partial class UnitTestExtrasLiteProtoFile {
   
     #region Extension registration
@@ -38,6 +41,8 @@ namespace Google.ProtocolBuffers.TestProtos {
     
   }
   #region Enums
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
   public enum ExtraEnum {
     DEFAULT = 10,
     EXLITE_FOO = 7,
@@ -48,6 +53,9 @@ namespace Google.ProtocolBuffers.TestProtos {
   #endregion
   
   #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
   public sealed partial class TestRequiredLite : pb::GeneratedMessageLite<TestRequiredLite, TestRequiredLite.Builder> {
     private static readonly TestRequiredLite defaultInstance = new Builder().BuildPartial();
     public static TestRequiredLite DefaultInstance {
@@ -177,6 +185,9 @@ namespace Google.ProtocolBuffers.TestProtos {
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
     public sealed partial class Builder : pb::GeneratedBuilderLite<TestRequiredLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
@@ -307,6 +318,9 @@ namespace Google.ProtocolBuffers.TestProtos {
     }
   }
   
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
   public sealed partial class TestInteropPersonLite : pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder> {
     private static readonly TestInteropPersonLite defaultInstance = new Builder().BuildPartial();
     public static TestInteropPersonLite DefaultInstance {
@@ -322,13 +336,21 @@ namespace Google.ProtocolBuffers.TestProtos {
     }
     
     #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
     public static class Types {
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
       public enum PhoneType {
         MOBILE = 0,
         HOME = 1,
         WORK = 2,
       }
       
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
       public sealed partial class PhoneNumber : pb::GeneratedMessageLite<PhoneNumber, PhoneNumber.Builder> {
         private static readonly PhoneNumber defaultInstance = new Builder().BuildPartial();
         public static PhoneNumber DefaultInstance {
@@ -457,6 +479,9 @@ namespace Google.ProtocolBuffers.TestProtos {
           return (Builder) new Builder().MergeFrom(prototype);
         }
         
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
         public sealed partial class Builder : pb::GeneratedBuilderLite<PhoneNumber, Builder> {
           protected override Builder ThisBuilder {
             get { return this; }
@@ -588,6 +613,9 @@ namespace Google.ProtocolBuffers.TestProtos {
         }
       }
       
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
       public sealed partial class Addresses : pb::GeneratedMessageLite<Addresses, Addresses.Builder> {
         private static readonly Addresses defaultInstance = new Builder().BuildPartial();
         public static Addresses DefaultInstance {
@@ -777,6 +805,9 @@ namespace Google.ProtocolBuffers.TestProtos {
           return (Builder) new Builder().MergeFrom(prototype);
         }
         
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
         public sealed partial class Builder : pb::GeneratedBuilderLite<Addresses, Builder> {
           protected override Builder ThisBuilder {
             get { return this; }
@@ -1216,6 +1247,9 @@ namespace Google.ProtocolBuffers.TestProtos {
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
     public sealed partial class Builder : pb::ExtendableBuilderLite<TestInteropPersonLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }
@@ -1505,6 +1539,9 @@ namespace Google.ProtocolBuffers.TestProtos {
     }
   }
   
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+  [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
   public sealed partial class TestInteropEmployeeIdLite : pb::GeneratedMessageLite<TestInteropEmployeeIdLite, TestInteropEmployeeIdLite.Builder> {
     private static readonly TestInteropEmployeeIdLite defaultInstance = new Builder().BuildPartial();
     public static TestInteropEmployeeIdLite DefaultInstance {
@@ -1614,6 +1651,9 @@ namespace Google.ProtocolBuffers.TestProtos {
       return (Builder) new Builder().MergeFrom(prototype);
     }
     
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")]
     public sealed partial class Builder : pb::GeneratedBuilderLite<TestInteropEmployeeIdLite, Builder> {
       protected override Builder ThisBuilder {
         get { return this; }