// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/protobuf/unittest_lite.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.ProtocolBuffers;
using pbc = global::Google.ProtocolBuffers.Collections;
using pbd = global::Google.ProtocolBuffers.Descriptors;
using scg = global::System.Collections.Generic;
namespace Google.ProtocolBuffers.TestProtos {

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public static partial class UnittestLite {

    #region Extension registration
    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalInt32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalInt64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalUint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalUint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSfixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSfixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFloatExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalDoubleExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalBoolExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalStringExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalBytesExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalGroupExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalNestedMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalForeignMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalImportMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalNestedEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalForeignEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalImportEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalStringPieceExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalCordExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalPublicImportMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalLazyMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedInt32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedInt64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedUint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedUint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSfixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSfixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFloatExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedDoubleExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedBoolExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedStringExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedBytesExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedGroupExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedNestedMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedForeignMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedImportMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedNestedEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedForeignEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedImportEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedStringPieceExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedCordExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedLazyMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultInt32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultInt64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultUint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultUint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSfixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSfixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFloatExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultDoubleExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultBoolExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultStringExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultBytesExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultNestedEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultForeignEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultImportEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultStringPieceExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultCordExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofUint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofNestedMessageExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofStringExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofBytesExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedInt32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedInt64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedUint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedUint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSint32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSint64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSfixed32ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSfixed64ExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFloatExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedDoubleExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedBoolExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedEnumExtensionLite);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtension);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.OptionalExt);
      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.RepeatedExt);
    }
    #endregion
    #region Extensions
    public const int OptionalInt32ExtensionLiteFieldNumber = 1;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalInt32ExtensionLite;
    public const int OptionalInt64ExtensionLiteFieldNumber = 2;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalInt64ExtensionLite;
    public const int OptionalUint32ExtensionLiteFieldNumber = 3;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OptionalUint32ExtensionLite;
    public const int OptionalUint64ExtensionLiteFieldNumber = 4;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> OptionalUint64ExtensionLite;
    public const int OptionalSint32ExtensionLiteFieldNumber = 5;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalSint32ExtensionLite;
    public const int OptionalSint64ExtensionLiteFieldNumber = 6;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalSint64ExtensionLite;
    public const int OptionalFixed32ExtensionLiteFieldNumber = 7;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OptionalFixed32ExtensionLite;
    public const int OptionalFixed64ExtensionLiteFieldNumber = 8;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> OptionalFixed64ExtensionLite;
    public const int OptionalSfixed32ExtensionLiteFieldNumber = 9;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalSfixed32ExtensionLite;
    public const int OptionalSfixed64ExtensionLiteFieldNumber = 10;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalSfixed64ExtensionLite;
    public const int OptionalFloatExtensionLiteFieldNumber = 11;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> OptionalFloatExtensionLite;
    public const int OptionalDoubleExtensionLiteFieldNumber = 12;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> OptionalDoubleExtensionLite;
    public const int OptionalBoolExtensionLiteFieldNumber = 13;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> OptionalBoolExtensionLite;
    public const int OptionalStringExtensionLiteFieldNumber = 14;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalStringExtensionLite;
    public const int OptionalBytesExtensionLiteFieldNumber = 15;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> OptionalBytesExtensionLite;
    public const int OptionalGroupExtensionLiteFieldNumber = 16;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite> OptionalGroupExtensionLite;
    public const int OptionalNestedMessageExtensionLiteFieldNumber = 18;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> OptionalNestedMessageExtensionLite;
    public const int OptionalForeignMessageExtensionLiteFieldNumber = 19;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> OptionalForeignMessageExtensionLite;
    public const int OptionalImportMessageExtensionLiteFieldNumber = 20;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> OptionalImportMessageExtensionLite;
    public const int OptionalNestedEnumExtensionLiteFieldNumber = 21;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> OptionalNestedEnumExtensionLite;
    public const int OptionalForeignEnumExtensionLiteFieldNumber = 22;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> OptionalForeignEnumExtensionLite;
    public const int OptionalImportEnumExtensionLiteFieldNumber = 23;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> OptionalImportEnumExtensionLite;
    public const int OptionalStringPieceExtensionLiteFieldNumber = 24;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalStringPieceExtensionLite;
    public const int OptionalCordExtensionLiteFieldNumber = 25;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalCordExtensionLite;
    public const int OptionalPublicImportMessageExtensionLiteFieldNumber = 26;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite> OptionalPublicImportMessageExtensionLite;
    public const int OptionalLazyMessageExtensionLiteFieldNumber = 27;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> OptionalLazyMessageExtensionLite;
    public const int RepeatedInt32ExtensionLiteFieldNumber = 31;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedInt32ExtensionLite;
    public const int RepeatedInt64ExtensionLiteFieldNumber = 32;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedInt64ExtensionLite;
    public const int RepeatedUint32ExtensionLiteFieldNumber = 33;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> RepeatedUint32ExtensionLite;
    public const int RepeatedUint64ExtensionLiteFieldNumber = 34;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> RepeatedUint64ExtensionLite;
    public const int RepeatedSint32ExtensionLiteFieldNumber = 35;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedSint32ExtensionLite;
    public const int RepeatedSint64ExtensionLiteFieldNumber = 36;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedSint64ExtensionLite;
    public const int RepeatedFixed32ExtensionLiteFieldNumber = 37;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> RepeatedFixed32ExtensionLite;
    public const int RepeatedFixed64ExtensionLiteFieldNumber = 38;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> RepeatedFixed64ExtensionLite;
    public const int RepeatedSfixed32ExtensionLiteFieldNumber = 39;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedSfixed32ExtensionLite;
    public const int RepeatedSfixed64ExtensionLiteFieldNumber = 40;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedSfixed64ExtensionLite;
    public const int RepeatedFloatExtensionLiteFieldNumber = 41;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> RepeatedFloatExtensionLite;
    public const int RepeatedDoubleExtensionLiteFieldNumber = 42;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> RepeatedDoubleExtensionLite;
    public const int RepeatedBoolExtensionLiteFieldNumber = 43;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> RepeatedBoolExtensionLite;
    public const int RepeatedStringExtensionLiteFieldNumber = 44;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedStringExtensionLite;
    public const int RepeatedBytesExtensionLiteFieldNumber = 45;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> RepeatedBytesExtensionLite;
    public const int RepeatedGroupExtensionLiteFieldNumber = 46;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite> RepeatedGroupExtensionLite;
    public const int RepeatedNestedMessageExtensionLiteFieldNumber = 48;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageExtensionLite;
    public const int RepeatedForeignMessageExtensionLiteFieldNumber = 49;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageExtensionLite;
    public const int RepeatedImportMessageExtensionLiteFieldNumber = 50;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageExtensionLite;
    public const int RepeatedNestedEnumExtensionLiteFieldNumber = 51;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumExtensionLite;
    public const int RepeatedForeignEnumExtensionLiteFieldNumber = 52;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumExtensionLite;
    public const int RepeatedImportEnumExtensionLiteFieldNumber = 53;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumExtensionLite;
    public const int RepeatedStringPieceExtensionLiteFieldNumber = 54;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedStringPieceExtensionLite;
    public const int RepeatedCordExtensionLiteFieldNumber = 55;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedCordExtensionLite;
    public const int RepeatedLazyMessageExtensionLiteFieldNumber = 57;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedLazyMessageExtensionLite;
    public const int DefaultInt32ExtensionLiteFieldNumber = 61;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultInt32ExtensionLite;
    public const int DefaultInt64ExtensionLiteFieldNumber = 62;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultInt64ExtensionLite;
    public const int DefaultUint32ExtensionLiteFieldNumber = 63;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> DefaultUint32ExtensionLite;
    public const int DefaultUint64ExtensionLiteFieldNumber = 64;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> DefaultUint64ExtensionLite;
    public const int DefaultSint32ExtensionLiteFieldNumber = 65;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultSint32ExtensionLite;
    public const int DefaultSint64ExtensionLiteFieldNumber = 66;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultSint64ExtensionLite;
    public const int DefaultFixed32ExtensionLiteFieldNumber = 67;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> DefaultFixed32ExtensionLite;
    public const int DefaultFixed64ExtensionLiteFieldNumber = 68;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> DefaultFixed64ExtensionLite;
    public const int DefaultSfixed32ExtensionLiteFieldNumber = 69;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultSfixed32ExtensionLite;
    public const int DefaultSfixed64ExtensionLiteFieldNumber = 70;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultSfixed64ExtensionLite;
    public const int DefaultFloatExtensionLiteFieldNumber = 71;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> DefaultFloatExtensionLite;
    public const int DefaultDoubleExtensionLiteFieldNumber = 72;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> DefaultDoubleExtensionLite;
    public const int DefaultBoolExtensionLiteFieldNumber = 73;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> DefaultBoolExtensionLite;
    public const int DefaultStringExtensionLiteFieldNumber = 74;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultStringExtensionLite;
    public const int DefaultBytesExtensionLiteFieldNumber = 75;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> DefaultBytesExtensionLite;
    public const int DefaultNestedEnumExtensionLiteFieldNumber = 81;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> DefaultNestedEnumExtensionLite;
    public const int DefaultForeignEnumExtensionLiteFieldNumber = 82;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> DefaultForeignEnumExtensionLite;
    public const int DefaultImportEnumExtensionLiteFieldNumber = 83;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> DefaultImportEnumExtensionLite;
    public const int DefaultStringPieceExtensionLiteFieldNumber = 84;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultStringPieceExtensionLite;
    public const int DefaultCordExtensionLiteFieldNumber = 85;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultCordExtensionLite;
    public const int OneofUint32ExtensionLiteFieldNumber = 111;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OneofUint32ExtensionLite;
    public const int OneofNestedMessageExtensionLiteFieldNumber = 112;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> OneofNestedMessageExtensionLite;
    public const int OneofStringExtensionLiteFieldNumber = 113;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OneofStringExtensionLite;
    public const int OneofBytesExtensionLiteFieldNumber = 114;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> OneofBytesExtensionLite;
    public const int PackedInt32ExtensionLiteFieldNumber = 90;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedInt32ExtensionLite;
    public const int PackedInt64ExtensionLiteFieldNumber = 91;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedInt64ExtensionLite;
    public const int PackedUint32ExtensionLiteFieldNumber = 92;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint> PackedUint32ExtensionLite;
    public const int PackedUint64ExtensionLiteFieldNumber = 93;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong> PackedUint64ExtensionLite;
    public const int PackedSint32ExtensionLiteFieldNumber = 94;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedSint32ExtensionLite;
    public const int PackedSint64ExtensionLiteFieldNumber = 95;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedSint64ExtensionLite;
    public const int PackedFixed32ExtensionLiteFieldNumber = 96;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint> PackedFixed32ExtensionLite;
    public const int PackedFixed64ExtensionLiteFieldNumber = 97;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong> PackedFixed64ExtensionLite;
    public const int PackedSfixed32ExtensionLiteFieldNumber = 98;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedSfixed32ExtensionLite;
    public const int PackedSfixed64ExtensionLiteFieldNumber = 99;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedSfixed64ExtensionLite;
    public const int PackedFloatExtensionLiteFieldNumber = 100;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, float> PackedFloatExtensionLite;
    public const int PackedDoubleExtensionLiteFieldNumber = 101;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, double> PackedDoubleExtensionLite;
    public const int PackedBoolExtensionLiteFieldNumber = 102;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, bool> PackedBoolExtensionLite;
    public const int PackedEnumExtensionLiteFieldNumber = 103;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumExtensionLite;
    #endregion

    #region Static variables
    #endregion
    #region Extensions
    internal static readonly object Descriptor;
    static UnittestLite() {
      Descriptor = null;
      global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtension = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.TestNestedExtensionLite.nested_extension",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(int),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtensionFieldNumber,
          pbd::FieldType.Int32);
      global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.OptionalExt = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>(
          "protobuf_unittest.TestParsingMergeLite.optional_ext",
          global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.OptionalExtFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.RepeatedExt = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>(
          "protobuf_unittest.TestParsingMergeLite.repeated_ext",
          global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.RepeatedExtFieldNumber,
          pbd::FieldType.Message,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalInt32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.optional_int32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(int),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalInt32ExtensionLiteFieldNumber,
          pbd::FieldType.Int32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalInt64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.optional_int64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(long),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalInt64ExtensionLiteFieldNumber,
          pbd::FieldType.Int64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalUint32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.optional_uint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(uint),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalUint32ExtensionLiteFieldNumber,
          pbd::FieldType.UInt32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalUint64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
          "protobuf_unittest.optional_uint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(ulong),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalUint64ExtensionLiteFieldNumber,
          pbd::FieldType.UInt64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSint32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.optional_sint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(int),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSint32ExtensionLiteFieldNumber,
          pbd::FieldType.SInt32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSint64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.optional_sint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(long),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSint64ExtensionLiteFieldNumber,
          pbd::FieldType.SInt64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFixed32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.optional_fixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(uint),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFixed32ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFixed64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
          "protobuf_unittest.optional_fixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(ulong),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFixed64ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSfixed32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.optional_sfixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(int),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSfixed32ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSfixed64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.optional_sfixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(long),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalSfixed64ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFloatExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(
          "protobuf_unittest.optional_float_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(float),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalFloatExtensionLiteFieldNumber,
          pbd::FieldType.Float);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalDoubleExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(
          "protobuf_unittest.optional_double_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(double),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalDoubleExtensionLiteFieldNumber,
          pbd::FieldType.Double);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalBoolExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(
          "protobuf_unittest.optional_bool_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(bool),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalBoolExtensionLiteFieldNumber,
          pbd::FieldType.Bool);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalStringExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.optional_string_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalStringExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalBytesExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
          "protobuf_unittest.optional_bytes_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalBytesExtensionLiteFieldNumber,
          pbd::FieldType.Bytes);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalGroupExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite>(
          "protobuf_unittest.optionalgroup_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalGroupExtensionLiteFieldNumber,
          pbd::FieldType.Group);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalNestedMessageExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
          "protobuf_unittest.optional_nested_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalNestedMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalForeignMessageExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>(
          "protobuf_unittest.optional_foreign_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalForeignMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalImportMessageExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>(
          "protobuf_unittest.optional_import_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalImportMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalNestedEnumExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(
          "protobuf_unittest.optional_nested_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum),
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalNestedEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalForeignEnumExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
          "protobuf_unittest.optional_foreign_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite),
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalForeignEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalImportEnumExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(
          "protobuf_unittest.optional_import_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite),
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalImportEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalStringPieceExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.optional_string_piece_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalStringPieceExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalCordExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.optional_cord_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalCordExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalPublicImportMessageExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite>(
          "protobuf_unittest.optional_public_import_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalPublicImportMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalLazyMessageExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
          "protobuf_unittest.optional_lazy_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OptionalLazyMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedInt32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.repeated_int32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedInt32ExtensionLiteFieldNumber,
          pbd::FieldType.Int32,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedInt64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.repeated_int64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedInt64ExtensionLiteFieldNumber,
          pbd::FieldType.Int64,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedUint32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.repeated_uint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedUint32ExtensionLiteFieldNumber,
          pbd::FieldType.UInt32,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedUint64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
          "protobuf_unittest.repeated_uint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedUint64ExtensionLiteFieldNumber,
          pbd::FieldType.UInt64,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSint32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.repeated_sint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSint32ExtensionLiteFieldNumber,
          pbd::FieldType.SInt32,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSint64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.repeated_sint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSint64ExtensionLiteFieldNumber,
          pbd::FieldType.SInt64,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFixed32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.repeated_fixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFixed32ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed32,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFixed64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
          "protobuf_unittest.repeated_fixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFixed64ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed64,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSfixed32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.repeated_sfixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSfixed32ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed32,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSfixed64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.repeated_sfixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedSfixed64ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed64,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFloatExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(
          "protobuf_unittest.repeated_float_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedFloatExtensionLiteFieldNumber,
          pbd::FieldType.Float,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedDoubleExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(
          "protobuf_unittest.repeated_double_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedDoubleExtensionLiteFieldNumber,
          pbd::FieldType.Double,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedBoolExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(
          "protobuf_unittest.repeated_bool_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedBoolExtensionLiteFieldNumber,
          pbd::FieldType.Bool,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedStringExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.repeated_string_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedStringExtensionLiteFieldNumber,
          pbd::FieldType.String,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedBytesExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
          "protobuf_unittest.repeated_bytes_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedBytesExtensionLiteFieldNumber,
          pbd::FieldType.Bytes,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedGroupExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite>(
          "protobuf_unittest.repeatedgroup_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedGroupExtensionLiteFieldNumber,
          pbd::FieldType.Group,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedNestedMessageExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
          "protobuf_unittest.repeated_nested_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedNestedMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedForeignMessageExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>(
          "protobuf_unittest.repeated_foreign_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedForeignMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedImportMessageExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>(
          "protobuf_unittest.repeated_import_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedImportMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedNestedEnumExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(
          "protobuf_unittest.repeated_nested_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedNestedEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedForeignEnumExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
          "protobuf_unittest.repeated_foreign_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedForeignEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedImportEnumExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(
          "protobuf_unittest.repeated_import_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedImportEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedStringPieceExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.repeated_string_piece_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedStringPieceExtensionLiteFieldNumber,
          pbd::FieldType.String,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedCordExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.repeated_cord_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedCordExtensionLiteFieldNumber,
          pbd::FieldType.String,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedLazyMessageExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
          "protobuf_unittest.repeated_lazy_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.RepeatedLazyMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message,
          false);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultInt32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.default_int32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          41,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultInt32ExtensionLiteFieldNumber,
          pbd::FieldType.Int32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultInt64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.default_int64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          42L,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultInt64ExtensionLiteFieldNumber,
          pbd::FieldType.Int64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultUint32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.default_uint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          43,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultUint32ExtensionLiteFieldNumber,
          pbd::FieldType.UInt32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultUint64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
          "protobuf_unittest.default_uint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          44UL,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultUint64ExtensionLiteFieldNumber,
          pbd::FieldType.UInt64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSint32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.default_sint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          -45,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSint32ExtensionLiteFieldNumber,
          pbd::FieldType.SInt32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSint64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.default_sint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          46L,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSint64ExtensionLiteFieldNumber,
          pbd::FieldType.SInt64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFixed32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.default_fixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          47,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFixed32ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFixed64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(
          "protobuf_unittest.default_fixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          48UL,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFixed64ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSfixed32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(
          "protobuf_unittest.default_sfixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          49,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSfixed32ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSfixed64ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(
          "protobuf_unittest.default_sfixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          -50L,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultSfixed64ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed64);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFloatExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(
          "protobuf_unittest.default_float_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          51.5F,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultFloatExtensionLiteFieldNumber,
          pbd::FieldType.Float);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultDoubleExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(
          "protobuf_unittest.default_double_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          52000D,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultDoubleExtensionLiteFieldNumber,
          pbd::FieldType.Double);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultBoolExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(
          "protobuf_unittest.default_bool_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          true,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultBoolExtensionLiteFieldNumber,
          pbd::FieldType.Bool);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultStringExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.default_string_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          "hello",
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultStringExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultBytesExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
          "protobuf_unittest.default_bytes_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          pb::ByteString.FromBase64("d29ybGQ="),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultBytesExtensionLiteFieldNumber,
          pbd::FieldType.Bytes);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultNestedEnumExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(
          "protobuf_unittest.default_nested_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultNestedEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultForeignEnumExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
          "protobuf_unittest.default_foreign_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultForeignEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultImportEnumExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(
          "protobuf_unittest.default_import_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultImportEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultStringPieceExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.default_string_piece_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          "abc",
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultStringPieceExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultCordExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.default_cord_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          "123",
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.DefaultCordExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofUint32ExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(
          "protobuf_unittest.oneof_uint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          default(uint),
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofUint32ExtensionLiteFieldNumber,
          pbd::FieldType.UInt32);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofNestedMessageExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(
          "protobuf_unittest.oneof_nested_message_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofNestedMessageExtensionLiteFieldNumber,
          pbd::FieldType.Message);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofStringExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(
          "protobuf_unittest.oneof_string_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofStringExtensionLiteFieldNumber,
          pbd::FieldType.String);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofBytesExtensionLite = 
        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(
          "protobuf_unittest.oneof_bytes_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,
          null,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.OneofBytesExtensionLiteFieldNumber,
          pbd::FieldType.Bytes);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedInt32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(
          "protobuf_unittest.packed_int32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedInt32ExtensionLiteFieldNumber,
          pbd::FieldType.Int32,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedInt64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(
          "protobuf_unittest.packed_int64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedInt64ExtensionLiteFieldNumber,
          pbd::FieldType.Int64,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedUint32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint>(
          "protobuf_unittest.packed_uint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedUint32ExtensionLiteFieldNumber,
          pbd::FieldType.UInt32,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedUint64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong>(
          "protobuf_unittest.packed_uint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedUint64ExtensionLiteFieldNumber,
          pbd::FieldType.UInt64,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSint32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(
          "protobuf_unittest.packed_sint32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSint32ExtensionLiteFieldNumber,
          pbd::FieldType.SInt32,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSint64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(
          "protobuf_unittest.packed_sint64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSint64ExtensionLiteFieldNumber,
          pbd::FieldType.SInt64,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFixed32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint>(
          "protobuf_unittest.packed_fixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFixed32ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed32,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFixed64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong>(
          "protobuf_unittest.packed_fixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFixed64ExtensionLiteFieldNumber,
          pbd::FieldType.Fixed64,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSfixed32ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(
          "protobuf_unittest.packed_sfixed32_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSfixed32ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed32,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSfixed64ExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(
          "protobuf_unittest.packed_sfixed64_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedSfixed64ExtensionLiteFieldNumber,
          pbd::FieldType.SFixed64,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFloatExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, float>(
          "protobuf_unittest.packed_float_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedFloatExtensionLiteFieldNumber,
          pbd::FieldType.Float,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedDoubleExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, double>(
          "protobuf_unittest.packed_double_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedDoubleExtensionLiteFieldNumber,
          pbd::FieldType.Double,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedBoolExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, bool>(
          "protobuf_unittest.packed_bool_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          null,
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedBoolExtensionLiteFieldNumber,
          pbd::FieldType.Bool,
          true);
      global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedEnumExtensionLite = 
        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(
          "protobuf_unittest.packed_enum_extension_lite",
          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,
          null,
          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),
          global::Google.ProtocolBuffers.TestProtos.UnittestLite.PackedEnumExtensionLiteFieldNumber,
          pbd::FieldType.Enum,
          true);
    }
    #endregion

  }
  #region Enums
  public enum ForeignEnumLite {
    FOREIGN_LITE_FOO = 4,
    FOREIGN_LITE_BAR = 5,
    FOREIGN_LITE_BAZ = 6,
  }

  #endregion

  #region Messages
  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestAllTypesLite : pb::GeneratedMessageLite<TestAllTypesLite, TestAllTypesLite.Builder> {
    private TestAllTypesLite() { }
    private static readonly TestAllTypesLite defaultInstance = new TestAllTypesLite().MakeReadOnly();
    private static readonly string[] _testAllTypesLiteFieldNames = new string[] { "default_bool", "default_bytes", "default_cord", "default_double", "default_fixed32", "default_fixed64", "default_float", "default_foreign_enum", "default_import_enum", "default_int32", "default_int64", "default_nested_enum", "default_sfixed32", "default_sfixed64", "default_sint32", "default_sint64", "default_string", "default_string_piece", "default_uint32", "default_uint64", "oneof_bytes", "oneof_nested_message", "oneof_string", "oneof_uint32", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_import_enum", "optional_import_message", "optional_int32", "optional_int64", "optional_lazy_message", "optional_nested_enum", "optional_nested_message", "optional_public_import_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "optionalgroup", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_lazy_message", "repeated_nested_enum", "repeated_nested_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64", "repeatedgroup" };
    private static readonly uint[] _testAllTypesLiteFieldTags = new uint[] { 584, 602, 682, 577, 541, 545, 573, 656, 664, 488, 496, 648, 557, 561, 520, 528, 594, 674, 504, 512, 914, 898, 906, 888, 104, 122, 202, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 218, 168, 146, 210, 77, 81, 40, 48, 114, 194, 24, 32, 131, 344, 362, 442, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 458, 408, 386, 317, 321, 280, 288, 354, 434, 264, 272, 371 };
    public static TestAllTypesLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestAllTypesLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestAllTypesLite ThisMessage {
      get { return this; }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      public enum NestedEnum {
        FOO = 1,
        BAR = 2,
        BAZ = 3,
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class NestedMessage : pb::GeneratedMessageLite<NestedMessage, NestedMessage.Builder> {
        private NestedMessage() { }
        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };
        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };
        public static NestedMessage DefaultInstance {
          get { return defaultInstance; }
        }

        public override NestedMessage DefaultInstanceForType {
          get { return DefaultInstance; }
        }

        protected override NestedMessage ThisMessage {
          get { return this; }
        }

        public const int BbFieldNumber = 1;
        private bool hasBb;
        private int bb_;
        public bool HasBb {
          get { return hasBb; }
        }
        public int Bb {
          get { return bb_; }
        }

        public override bool IsInitialized {
          get {
            return true;
          }
        }

        public override void WriteTo(pb::ICodedOutputStream output) {
          CalcSerializedSize();
          string[] field_names = _nestedMessageFieldNames;
          if (hasBb) {
            output.WriteInt32(1, field_names[0], Bb);
          }
        }

        private int memoizedSerializedSize = -1;
        public override int SerializedSize {
          get {
            int size = memoizedSerializedSize;
            if (size != -1) return size;
            return CalcSerializedSize();
          }
        }

        private int CalcSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;

          size = 0;
          if (hasBb) {
            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
          }
          memoizedSerializedSize = size;
          return size;
        }
        #region Lite runtime methods
        public override int GetHashCode() {
          int hash = GetType().GetHashCode();
          if (hasBb) {
            hash ^= bb_.GetHashCode();
          }
          return hash;
        }

        public override bool Equals(object obj) {
          NestedMessage other = obj as NestedMessage;
          if (other == null) return false;
          if (hasBb != other.hasBb || (hasBb && !bb_.Equals(other.bb_))) return false;
          return true;
        }

        public override void PrintTo(global::System.IO.TextWriter writer) {
          PrintField("bb", hasBb, bb_, writer);
        }
        #endregion

        public static NestedMessage ParseFrom(pb::ByteString data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static NestedMessage ParseFrom(byte[] data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
        }
        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
        }
        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        private NestedMessage MakeReadOnly() {
          return this;
        }

        public static Builder CreateBuilder() { return new Builder(); }
        public override Builder ToBuilder() { return CreateBuilder(this); }
        public override Builder CreateBuilderForType() { return new Builder(); }
        public static Builder CreateBuilder(NestedMessage prototype) {
          return new Builder(prototype);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public sealed partial class Builder : pb::GeneratedBuilderLite<NestedMessage, Builder> {
          protected override Builder ThisBuilder {
            get { return this; }
          }
          public Builder() {
            result = DefaultInstance;
            resultIsReadOnly = true;
          }
          internal Builder(NestedMessage cloneFrom) {
            result = cloneFrom;
            resultIsReadOnly = true;
          }

          private bool resultIsReadOnly;
          private NestedMessage result;

          private NestedMessage PrepareBuilder() {
            if (resultIsReadOnly) {
              NestedMessage original = result;
              result = new NestedMessage();
              resultIsReadOnly = false;
              MergeFrom(original);
            }
            return result;
          }

          public override bool IsInitialized {
            get { return result.IsInitialized; }
          }

          protected override NestedMessage MessageBeingBuilt {
            get { return PrepareBuilder(); }
          }

          public override Builder Clear() {
            result = DefaultInstance;
            resultIsReadOnly = true;
            return this;
          }

          public override Builder Clone() {
            if (resultIsReadOnly) {
              return new Builder(result);
            } else {
              return new Builder().MergeFrom(result);
            }
          }

          public override NestedMessage DefaultInstanceForType {
            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }
          }

          public override NestedMessage BuildPartial() {
            if (resultIsReadOnly) {
              return result;
            }
            resultIsReadOnly = true;
            return result.MakeReadOnly();
          }

          public override Builder MergeFrom(pb::IMessageLite other) {
            if (other is NestedMessage) {
              return MergeFrom((NestedMessage) other);
            } else {
              base.MergeFrom(other);
              return this;
            }
          }

          public override Builder MergeFrom(NestedMessage other) {
            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) return this;
            PrepareBuilder();
            if (other.HasBb) {
              Bb = other.Bb;
            }
            return this;
          }

          public override Builder MergeFrom(pb::ICodedInputStream input) {
            return MergeFrom(input, pb::ExtensionRegistry.Empty);
          }

          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
            PrepareBuilder();
            uint tag;
            string field_name;
            while (input.ReadTag(out tag, out field_name)) {
              if(tag == 0 && field_name != null) {
                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
                if(field_ordinal >= 0)
                  tag = _nestedMessageFieldTags[field_ordinal];
                else {
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  continue;
                }
              }
              switch (tag) {
                case 0: {
                  throw pb::InvalidProtocolBufferException.InvalidTag();
                }
                default: {
                  if (pb::WireFormat.IsEndGroupTag(tag)) {
                    return this;
                  }
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  break;
                }
                case 8: {
                  result.hasBb = input.ReadInt32(ref result.bb_);
                  break;
                }
              }
            }

            return this;
          }


          public bool HasBb {
            get { return result.hasBb; }
          }
          public int Bb {
            get { return result.Bb; }
            set { SetBb(value); }
          }
          public Builder SetBb(int value) {
            PrepareBuilder();
            result.hasBb = true;
            result.bb_ = value;
            return this;
          }
          public Builder ClearBb() {
            PrepareBuilder();
            result.hasBb = false;
            result.bb_ = 0;
            return this;
          }
        }
        static NestedMessage() {
          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
        }
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class OptionalGroup : pb::GeneratedMessageLite<OptionalGroup, OptionalGroup.Builder> {
        private OptionalGroup() { }
        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();
        private static readonly string[] _optionalGroupFieldNames = new string[] { "a" };
        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 136 };
        public static OptionalGroup DefaultInstance {
          get { return defaultInstance; }
        }

        public override OptionalGroup DefaultInstanceForType {
          get { return DefaultInstance; }
        }

        protected override OptionalGroup ThisMessage {
          get { return this; }
        }

        public const int AFieldNumber = 17;
        private bool hasA;
        private int a_;
        public bool HasA {
          get { return hasA; }
        }
        public int A {
          get { return a_; }
        }

        public override bool IsInitialized {
          get {
            return true;
          }
        }

        public override void WriteTo(pb::ICodedOutputStream output) {
          CalcSerializedSize();
          string[] field_names = _optionalGroupFieldNames;
          if (hasA) {
            output.WriteInt32(17, field_names[0], A);
          }
        }

        private int memoizedSerializedSize = -1;
        public override int SerializedSize {
          get {
            int size = memoizedSerializedSize;
            if (size != -1) return size;
            return CalcSerializedSize();
          }
        }

        private int CalcSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;

          size = 0;
          if (hasA) {
            size += pb::CodedOutputStream.ComputeInt32Size(17, A);
          }
          memoizedSerializedSize = size;
          return size;
        }
        #region Lite runtime methods
        public override int GetHashCode() {
          int hash = GetType().GetHashCode();
          if (hasA) {
            hash ^= a_.GetHashCode();
          }
          return hash;
        }

        public override bool Equals(object obj) {
          OptionalGroup other = obj as OptionalGroup;
          if (other == null) return false;
          if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;
          return true;
        }

        public override void PrintTo(global::System.IO.TextWriter writer) {
          PrintField("a", hasA, a_, writer);
        }
        #endregion

        public static OptionalGroup ParseFrom(pb::ByteString data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(byte[] data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {
          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
        }
        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
        }
        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        private OptionalGroup MakeReadOnly() {
          return this;
        }

        public static Builder CreateBuilder() { return new Builder(); }
        public override Builder ToBuilder() { return CreateBuilder(this); }
        public override Builder CreateBuilderForType() { return new Builder(); }
        public static Builder CreateBuilder(OptionalGroup prototype) {
          return new Builder(prototype);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup, Builder> {
          protected override Builder ThisBuilder {
            get { return this; }
          }
          public Builder() {
            result = DefaultInstance;
            resultIsReadOnly = true;
          }
          internal Builder(OptionalGroup cloneFrom) {
            result = cloneFrom;
            resultIsReadOnly = true;
          }

          private bool resultIsReadOnly;
          private OptionalGroup result;

          private OptionalGroup PrepareBuilder() {
            if (resultIsReadOnly) {
              OptionalGroup original = result;
              result = new OptionalGroup();
              resultIsReadOnly = false;
              MergeFrom(original);
            }
            return result;
          }

          public override bool IsInitialized {
            get { return result.IsInitialized; }
          }

          protected override OptionalGroup MessageBeingBuilt {
            get { return PrepareBuilder(); }
          }

          public override Builder Clear() {
            result = DefaultInstance;
            resultIsReadOnly = true;
            return this;
          }

          public override Builder Clone() {
            if (resultIsReadOnly) {
              return new Builder(result);
            } else {
              return new Builder().MergeFrom(result);
            }
          }

          public override OptionalGroup DefaultInstanceForType {
            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance; }
          }

          public override OptionalGroup BuildPartial() {
            if (resultIsReadOnly) {
              return result;
            }
            resultIsReadOnly = true;
            return result.MakeReadOnly();
          }

          public override Builder MergeFrom(pb::IMessageLite other) {
            if (other is OptionalGroup) {
              return MergeFrom((OptionalGroup) other);
            } else {
              base.MergeFrom(other);
              return this;
            }
          }

          public override Builder MergeFrom(OptionalGroup other) {
            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance) return this;
            PrepareBuilder();
            if (other.HasA) {
              A = other.A;
            }
            return this;
          }

          public override Builder MergeFrom(pb::ICodedInputStream input) {
            return MergeFrom(input, pb::ExtensionRegistry.Empty);
          }

          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
            PrepareBuilder();
            uint tag;
            string field_name;
            while (input.ReadTag(out tag, out field_name)) {
              if(tag == 0 && field_name != null) {
                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
                if(field_ordinal >= 0)
                  tag = _optionalGroupFieldTags[field_ordinal];
                else {
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  continue;
                }
              }
              switch (tag) {
                case 0: {
                  throw pb::InvalidProtocolBufferException.InvalidTag();
                }
                default: {
                  if (pb::WireFormat.IsEndGroupTag(tag)) {
                    return this;
                  }
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  break;
                }
                case 136: {
                  result.hasA = input.ReadInt32(ref result.a_);
                  break;
                }
              }
            }

            return this;
          }


          public bool HasA {
            get { return result.hasA; }
          }
          public int A {
            get { return result.A; }
            set { SetA(value); }
          }
          public Builder SetA(int value) {
            PrepareBuilder();
            result.hasA = true;
            result.a_ = value;
            return this;
          }
          public Builder ClearA() {
            PrepareBuilder();
            result.hasA = false;
            result.a_ = 0;
            return this;
          }
        }
        static OptionalGroup() {
          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
        }
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class RepeatedGroup : pb::GeneratedMessageLite<RepeatedGroup, RepeatedGroup.Builder> {
        private RepeatedGroup() { }
        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();
        private static readonly string[] _repeatedGroupFieldNames = new string[] { "a" };
        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 376 };
        public static RepeatedGroup DefaultInstance {
          get { return defaultInstance; }
        }

        public override RepeatedGroup DefaultInstanceForType {
          get { return DefaultInstance; }
        }

        protected override RepeatedGroup ThisMessage {
          get { return this; }
        }

        public const int AFieldNumber = 47;
        private bool hasA;
        private int a_;
        public bool HasA {
          get { return hasA; }
        }
        public int A {
          get { return a_; }
        }

        public override bool IsInitialized {
          get {
            return true;
          }
        }

        public override void WriteTo(pb::ICodedOutputStream output) {
          CalcSerializedSize();
          string[] field_names = _repeatedGroupFieldNames;
          if (hasA) {
            output.WriteInt32(47, field_names[0], A);
          }
        }

        private int memoizedSerializedSize = -1;
        public override int SerializedSize {
          get {
            int size = memoizedSerializedSize;
            if (size != -1) return size;
            return CalcSerializedSize();
          }
        }

        private int CalcSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;

          size = 0;
          if (hasA) {
            size += pb::CodedOutputStream.ComputeInt32Size(47, A);
          }
          memoizedSerializedSize = size;
          return size;
        }
        #region Lite runtime methods
        public override int GetHashCode() {
          int hash = GetType().GetHashCode();
          if (hasA) {
            hash ^= a_.GetHashCode();
          }
          return hash;
        }

        public override bool Equals(object obj) {
          RepeatedGroup other = obj as RepeatedGroup;
          if (other == null) return false;
          if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;
          return true;
        }

        public override void PrintTo(global::System.IO.TextWriter writer) {
          PrintField("a", hasA, a_, writer);
        }
        #endregion

        public static RepeatedGroup ParseFrom(pb::ByteString data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(byte[] data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {
          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
        }
        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        private RepeatedGroup MakeReadOnly() {
          return this;
        }

        public static Builder CreateBuilder() { return new Builder(); }
        public override Builder ToBuilder() { return CreateBuilder(this); }
        public override Builder CreateBuilderForType() { return new Builder(); }
        public static Builder CreateBuilder(RepeatedGroup prototype) {
          return new Builder(prototype);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup, Builder> {
          protected override Builder ThisBuilder {
            get { return this; }
          }
          public Builder() {
            result = DefaultInstance;
            resultIsReadOnly = true;
          }
          internal Builder(RepeatedGroup cloneFrom) {
            result = cloneFrom;
            resultIsReadOnly = true;
          }

          private bool resultIsReadOnly;
          private RepeatedGroup result;

          private RepeatedGroup PrepareBuilder() {
            if (resultIsReadOnly) {
              RepeatedGroup original = result;
              result = new RepeatedGroup();
              resultIsReadOnly = false;
              MergeFrom(original);
            }
            return result;
          }

          public override bool IsInitialized {
            get { return result.IsInitialized; }
          }

          protected override RepeatedGroup MessageBeingBuilt {
            get { return PrepareBuilder(); }
          }

          public override Builder Clear() {
            result = DefaultInstance;
            resultIsReadOnly = true;
            return this;
          }

          public override Builder Clone() {
            if (resultIsReadOnly) {
              return new Builder(result);
            } else {
              return new Builder().MergeFrom(result);
            }
          }

          public override RepeatedGroup DefaultInstanceForType {
            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance; }
          }

          public override RepeatedGroup BuildPartial() {
            if (resultIsReadOnly) {
              return result;
            }
            resultIsReadOnly = true;
            return result.MakeReadOnly();
          }

          public override Builder MergeFrom(pb::IMessageLite other) {
            if (other is RepeatedGroup) {
              return MergeFrom((RepeatedGroup) other);
            } else {
              base.MergeFrom(other);
              return this;
            }
          }

          public override Builder MergeFrom(RepeatedGroup other) {
            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance) return this;
            PrepareBuilder();
            if (other.HasA) {
              A = other.A;
            }
            return this;
          }

          public override Builder MergeFrom(pb::ICodedInputStream input) {
            return MergeFrom(input, pb::ExtensionRegistry.Empty);
          }

          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
            PrepareBuilder();
            uint tag;
            string field_name;
            while (input.ReadTag(out tag, out field_name)) {
              if(tag == 0 && field_name != null) {
                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
                if(field_ordinal >= 0)
                  tag = _repeatedGroupFieldTags[field_ordinal];
                else {
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  continue;
                }
              }
              switch (tag) {
                case 0: {
                  throw pb::InvalidProtocolBufferException.InvalidTag();
                }
                default: {
                  if (pb::WireFormat.IsEndGroupTag(tag)) {
                    return this;
                  }
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  break;
                }
                case 376: {
                  result.hasA = input.ReadInt32(ref result.a_);
                  break;
                }
              }
            }

            return this;
          }


          public bool HasA {
            get { return result.hasA; }
          }
          public int A {
            get { return result.A; }
            set { SetA(value); }
          }
          public Builder SetA(int value) {
            PrepareBuilder();
            result.hasA = true;
            result.a_ = value;
            return this;
          }
          public Builder ClearA() {
            PrepareBuilder();
            result.hasA = false;
            result.a_ = 0;
            return this;
          }
        }
        static RepeatedGroup() {
          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
        }
      }

    }
    #endregion

    private object oneofField_;
    public enum OneofFieldOneofCase {
      OneofUint32 = 111,
      OneofNestedMessage = 112,
      OneofString = 113,
      OneofBytes = 114,
      None = 0,
    }
    private OneofFieldOneofCase oneofFieldCase_ = OneofFieldOneofCase.None;
    public OneofFieldOneofCase OneofFieldCase {
      get { return oneofFieldCase_; }
    }

    public const int OptionalInt32FieldNumber = 1;
    private bool hasOptionalInt32;
    private int optionalInt32_;
    public bool HasOptionalInt32 {
      get { return hasOptionalInt32; }
    }
    public int OptionalInt32 {
      get { return optionalInt32_; }
    }

    public const int OptionalInt64FieldNumber = 2;
    private bool hasOptionalInt64;
    private long optionalInt64_;
    public bool HasOptionalInt64 {
      get { return hasOptionalInt64; }
    }
    public long OptionalInt64 {
      get { return optionalInt64_; }
    }

    public const int OptionalUint32FieldNumber = 3;
    private bool hasOptionalUint32;
    private uint optionalUint32_;
    public bool HasOptionalUint32 {
      get { return hasOptionalUint32; }
    }
    public uint OptionalUint32 {
      get { return optionalUint32_; }
    }

    public const int OptionalUint64FieldNumber = 4;
    private bool hasOptionalUint64;
    private ulong optionalUint64_;
    public bool HasOptionalUint64 {
      get { return hasOptionalUint64; }
    }
    public ulong OptionalUint64 {
      get { return optionalUint64_; }
    }

    public const int OptionalSint32FieldNumber = 5;
    private bool hasOptionalSint32;
    private int optionalSint32_;
    public bool HasOptionalSint32 {
      get { return hasOptionalSint32; }
    }
    public int OptionalSint32 {
      get { return optionalSint32_; }
    }

    public const int OptionalSint64FieldNumber = 6;
    private bool hasOptionalSint64;
    private long optionalSint64_;
    public bool HasOptionalSint64 {
      get { return hasOptionalSint64; }
    }
    public long OptionalSint64 {
      get { return optionalSint64_; }
    }

    public const int OptionalFixed32FieldNumber = 7;
    private bool hasOptionalFixed32;
    private uint optionalFixed32_;
    public bool HasOptionalFixed32 {
      get { return hasOptionalFixed32; }
    }
    public uint OptionalFixed32 {
      get { return optionalFixed32_; }
    }

    public const int OptionalFixed64FieldNumber = 8;
    private bool hasOptionalFixed64;
    private ulong optionalFixed64_;
    public bool HasOptionalFixed64 {
      get { return hasOptionalFixed64; }
    }
    public ulong OptionalFixed64 {
      get { return optionalFixed64_; }
    }

    public const int OptionalSfixed32FieldNumber = 9;
    private bool hasOptionalSfixed32;
    private int optionalSfixed32_;
    public bool HasOptionalSfixed32 {
      get { return hasOptionalSfixed32; }
    }
    public int OptionalSfixed32 {
      get { return optionalSfixed32_; }
    }

    public const int OptionalSfixed64FieldNumber = 10;
    private bool hasOptionalSfixed64;
    private long optionalSfixed64_;
    public bool HasOptionalSfixed64 {
      get { return hasOptionalSfixed64; }
    }
    public long OptionalSfixed64 {
      get { return optionalSfixed64_; }
    }

    public const int OptionalFloatFieldNumber = 11;
    private bool hasOptionalFloat;
    private float optionalFloat_;
    public bool HasOptionalFloat {
      get { return hasOptionalFloat; }
    }
    public float OptionalFloat {
      get { return optionalFloat_; }
    }

    public const int OptionalDoubleFieldNumber = 12;
    private bool hasOptionalDouble;
    private double optionalDouble_;
    public bool HasOptionalDouble {
      get { return hasOptionalDouble; }
    }
    public double OptionalDouble {
      get { return optionalDouble_; }
    }

    public const int OptionalBoolFieldNumber = 13;
    private bool hasOptionalBool;
    private bool optionalBool_;
    public bool HasOptionalBool {
      get { return hasOptionalBool; }
    }
    public bool OptionalBool {
      get { return optionalBool_; }
    }

    public const int OptionalStringFieldNumber = 14;
    private bool hasOptionalString;
    private string optionalString_ = "";
    public bool HasOptionalString {
      get { return hasOptionalString; }
    }
    public string OptionalString {
      get { return optionalString_; }
    }

    public const int OptionalBytesFieldNumber = 15;
    private bool hasOptionalBytes;
    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;
    public bool HasOptionalBytes {
      get { return hasOptionalBytes; }
    }
    public pb::ByteString OptionalBytes {
      get { return optionalBytes_; }
    }

    public const int OptionalGroupFieldNumber = 16;
    private bool hasOptionalGroup;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup optionalGroup_;
    public bool HasOptionalGroup {
      get { return hasOptionalGroup; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup OptionalGroup {
      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance; }
    }

    public const int OptionalNestedMessageFieldNumber = 18;
    private bool hasOptionalNestedMessage;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage optionalNestedMessage_;
    public bool HasOptionalNestedMessage {
      get { return hasOptionalNestedMessage; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OptionalNestedMessage {
      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }
    }

    public const int OptionalForeignMessageFieldNumber = 19;
    private bool hasOptionalForeignMessage;
    private global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite optionalForeignMessage_;
    public bool HasOptionalForeignMessage {
      get { return hasOptionalForeignMessage; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite OptionalForeignMessage {
      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance; }
    }

    public const int OptionalImportMessageFieldNumber = 20;
    private bool hasOptionalImportMessage;
    private global::Google.ProtocolBuffers.TestProtos.ImportMessageLite optionalImportMessage_;
    public bool HasOptionalImportMessage {
      get { return hasOptionalImportMessage; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite OptionalImportMessage {
      get { return optionalImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance; }
    }

    public const int OptionalNestedEnumFieldNumber = 21;
    private bool hasOptionalNestedEnum;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.FOO;
    public bool HasOptionalNestedEnum {
      get { return hasOptionalNestedEnum; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum OptionalNestedEnum {
      get { return optionalNestedEnum_; }
    }

    public const int OptionalForeignEnumFieldNumber = 22;
    private bool hasOptionalForeignEnum;
    private global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_FOO;
    public bool HasOptionalForeignEnum {
      get { return hasOptionalForeignEnum; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite OptionalForeignEnum {
      get { return optionalForeignEnum_; }
    }

    public const int OptionalImportEnumFieldNumber = 23;
    private bool hasOptionalImportEnum;
    private global::Google.ProtocolBuffers.TestProtos.ImportEnumLite optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_FOO;
    public bool HasOptionalImportEnum {
      get { return hasOptionalImportEnum; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite OptionalImportEnum {
      get { return optionalImportEnum_; }
    }

    public const int OptionalStringPieceFieldNumber = 24;
    private bool hasOptionalStringPiece;
    private string optionalStringPiece_ = "";
    public bool HasOptionalStringPiece {
      get { return hasOptionalStringPiece; }
    }
    public string OptionalStringPiece {
      get { return optionalStringPiece_; }
    }

    public const int OptionalCordFieldNumber = 25;
    private bool hasOptionalCord;
    private string optionalCord_ = "";
    public bool HasOptionalCord {
      get { return hasOptionalCord; }
    }
    public string OptionalCord {
      get { return optionalCord_; }
    }

    public const int OptionalPublicImportMessageFieldNumber = 26;
    private bool hasOptionalPublicImportMessage;
    private global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite optionalPublicImportMessage_;
    public bool HasOptionalPublicImportMessage {
      get { return hasOptionalPublicImportMessage; }
    }
    public global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite OptionalPublicImportMessage {
      get { return optionalPublicImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.DefaultInstance; }
    }

    public const int OptionalLazyMessageFieldNumber = 27;
    private bool hasOptionalLazyMessage;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage optionalLazyMessage_;
    public bool HasOptionalLazyMessage {
      get { return hasOptionalLazyMessage; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OptionalLazyMessage {
      get { return optionalLazyMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }
    }

    public const int RepeatedInt32FieldNumber = 31;
    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();
    public scg::IList<int> RepeatedInt32List {
      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }
    }
    public int RepeatedInt32Count {
      get { return repeatedInt32_.Count; }
    }
    public int GetRepeatedInt32(int index) {
      return repeatedInt32_[index];
    }

    public const int RepeatedInt64FieldNumber = 32;
    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();
    public scg::IList<long> RepeatedInt64List {
      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }
    }
    public int RepeatedInt64Count {
      get { return repeatedInt64_.Count; }
    }
    public long GetRepeatedInt64(int index) {
      return repeatedInt64_[index];
    }

    public const int RepeatedUint32FieldNumber = 33;
    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();
    public scg::IList<uint> RepeatedUint32List {
      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }
    }
    public int RepeatedUint32Count {
      get { return repeatedUint32_.Count; }
    }
    public uint GetRepeatedUint32(int index) {
      return repeatedUint32_[index];
    }

    public const int RepeatedUint64FieldNumber = 34;
    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();
    public scg::IList<ulong> RepeatedUint64List {
      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }
    }
    public int RepeatedUint64Count {
      get { return repeatedUint64_.Count; }
    }
    public ulong GetRepeatedUint64(int index) {
      return repeatedUint64_[index];
    }

    public const int RepeatedSint32FieldNumber = 35;
    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();
    public scg::IList<int> RepeatedSint32List {
      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }
    }
    public int RepeatedSint32Count {
      get { return repeatedSint32_.Count; }
    }
    public int GetRepeatedSint32(int index) {
      return repeatedSint32_[index];
    }

    public const int RepeatedSint64FieldNumber = 36;
    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();
    public scg::IList<long> RepeatedSint64List {
      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }
    }
    public int RepeatedSint64Count {
      get { return repeatedSint64_.Count; }
    }
    public long GetRepeatedSint64(int index) {
      return repeatedSint64_[index];
    }

    public const int RepeatedFixed32FieldNumber = 37;
    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();
    public scg::IList<uint> RepeatedFixed32List {
      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }
    }
    public int RepeatedFixed32Count {
      get { return repeatedFixed32_.Count; }
    }
    public uint GetRepeatedFixed32(int index) {
      return repeatedFixed32_[index];
    }

    public const int RepeatedFixed64FieldNumber = 38;
    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();
    public scg::IList<ulong> RepeatedFixed64List {
      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }
    }
    public int RepeatedFixed64Count {
      get { return repeatedFixed64_.Count; }
    }
    public ulong GetRepeatedFixed64(int index) {
      return repeatedFixed64_[index];
    }

    public const int RepeatedSfixed32FieldNumber = 39;
    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();
    public scg::IList<int> RepeatedSfixed32List {
      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }
    }
    public int RepeatedSfixed32Count {
      get { return repeatedSfixed32_.Count; }
    }
    public int GetRepeatedSfixed32(int index) {
      return repeatedSfixed32_[index];
    }

    public const int RepeatedSfixed64FieldNumber = 40;
    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();
    public scg::IList<long> RepeatedSfixed64List {
      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }
    }
    public int RepeatedSfixed64Count {
      get { return repeatedSfixed64_.Count; }
    }
    public long GetRepeatedSfixed64(int index) {
      return repeatedSfixed64_[index];
    }

    public const int RepeatedFloatFieldNumber = 41;
    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();
    public scg::IList<float> RepeatedFloatList {
      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }
    }
    public int RepeatedFloatCount {
      get { return repeatedFloat_.Count; }
    }
    public float GetRepeatedFloat(int index) {
      return repeatedFloat_[index];
    }

    public const int RepeatedDoubleFieldNumber = 42;
    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();
    public scg::IList<double> RepeatedDoubleList {
      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }
    }
    public int RepeatedDoubleCount {
      get { return repeatedDouble_.Count; }
    }
    public double GetRepeatedDouble(int index) {
      return repeatedDouble_[index];
    }

    public const int RepeatedBoolFieldNumber = 43;
    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();
    public scg::IList<bool> RepeatedBoolList {
      get { return pbc::Lists.AsReadOnly(repeatedBool_); }
    }
    public int RepeatedBoolCount {
      get { return repeatedBool_.Count; }
    }
    public bool GetRepeatedBool(int index) {
      return repeatedBool_[index];
    }

    public const int RepeatedStringFieldNumber = 44;
    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();
    public scg::IList<string> RepeatedStringList {
      get { return pbc::Lists.AsReadOnly(repeatedString_); }
    }
    public int RepeatedStringCount {
      get { return repeatedString_.Count; }
    }
    public string GetRepeatedString(int index) {
      return repeatedString_[index];
    }

    public const int RepeatedBytesFieldNumber = 45;
    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();
    public scg::IList<pb::ByteString> RepeatedBytesList {
      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }
    }
    public int RepeatedBytesCount {
      get { return repeatedBytes_.Count; }
    }
    public pb::ByteString GetRepeatedBytes(int index) {
      return repeatedBytes_[index];
    }

    public const int RepeatedGroupFieldNumber = 46;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> RepeatedGroupList {
      get { return repeatedGroup_; }
    }
    public int RepeatedGroupCount {
      get { return repeatedGroup_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup GetRepeatedGroup(int index) {
      return repeatedGroup_[index];
    }

    public const int RepeatedNestedMessageFieldNumber = 48;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageList {
      get { return repeatedNestedMessage_; }
    }
    public int RepeatedNestedMessageCount {
      get { return repeatedNestedMessage_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage GetRepeatedNestedMessage(int index) {
      return repeatedNestedMessage_[index];
    }

    public const int RepeatedForeignMessageFieldNumber = 49;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageList {
      get { return repeatedForeignMessage_; }
    }
    public int RepeatedForeignMessageCount {
      get { return repeatedForeignMessage_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite GetRepeatedForeignMessage(int index) {
      return repeatedForeignMessage_[index];
    }

    public const int RepeatedImportMessageFieldNumber = 50;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> repeatedImportMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageList {
      get { return repeatedImportMessage_; }
    }
    public int RepeatedImportMessageCount {
      get { return repeatedImportMessage_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite GetRepeatedImportMessage(int index) {
      return repeatedImportMessage_[index];
    }

    public const int RepeatedNestedEnumFieldNumber = 51;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumList {
      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }
    }
    public int RepeatedNestedEnumCount {
      get { return repeatedNestedEnum_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum GetRepeatedNestedEnum(int index) {
      return repeatedNestedEnum_[index];
    }

    public const int RepeatedForeignEnumFieldNumber = 52;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumList {
      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }
    }
    public int RepeatedForeignEnumCount {
      get { return repeatedForeignEnum_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetRepeatedForeignEnum(int index) {
      return repeatedForeignEnum_[index];
    }

    public const int RepeatedImportEnumFieldNumber = 53;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> repeatedImportEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumList {
      get { return pbc::Lists.AsReadOnly(repeatedImportEnum_); }
    }
    public int RepeatedImportEnumCount {
      get { return repeatedImportEnum_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite GetRepeatedImportEnum(int index) {
      return repeatedImportEnum_[index];
    }

    public const int RepeatedStringPieceFieldNumber = 54;
    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();
    public scg::IList<string> RepeatedStringPieceList {
      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }
    }
    public int RepeatedStringPieceCount {
      get { return repeatedStringPiece_.Count; }
    }
    public string GetRepeatedStringPiece(int index) {
      return repeatedStringPiece_[index];
    }

    public const int RepeatedCordFieldNumber = 55;
    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();
    public scg::IList<string> RepeatedCordList {
      get { return pbc::Lists.AsReadOnly(repeatedCord_); }
    }
    public int RepeatedCordCount {
      get { return repeatedCord_.Count; }
    }
    public string GetRepeatedCord(int index) {
      return repeatedCord_[index];
    }

    public const int RepeatedLazyMessageFieldNumber = 57;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> repeatedLazyMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedLazyMessageList {
      get { return repeatedLazyMessage_; }
    }
    public int RepeatedLazyMessageCount {
      get { return repeatedLazyMessage_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage GetRepeatedLazyMessage(int index) {
      return repeatedLazyMessage_[index];
    }

    public const int DefaultInt32FieldNumber = 61;
    private bool hasDefaultInt32;
    private int defaultInt32_ = 41;
    public bool HasDefaultInt32 {
      get { return hasDefaultInt32; }
    }
    public int DefaultInt32 {
      get { return defaultInt32_; }
    }

    public const int DefaultInt64FieldNumber = 62;
    private bool hasDefaultInt64;
    private long defaultInt64_ = 42L;
    public bool HasDefaultInt64 {
      get { return hasDefaultInt64; }
    }
    public long DefaultInt64 {
      get { return defaultInt64_; }
    }

    public const int DefaultUint32FieldNumber = 63;
    private bool hasDefaultUint32;
    private uint defaultUint32_ = 43;
    public bool HasDefaultUint32 {
      get { return hasDefaultUint32; }
    }
    public uint DefaultUint32 {
      get { return defaultUint32_; }
    }

    public const int DefaultUint64FieldNumber = 64;
    private bool hasDefaultUint64;
    private ulong defaultUint64_ = 44UL;
    public bool HasDefaultUint64 {
      get { return hasDefaultUint64; }
    }
    public ulong DefaultUint64 {
      get { return defaultUint64_; }
    }

    public const int DefaultSint32FieldNumber = 65;
    private bool hasDefaultSint32;
    private int defaultSint32_ = -45;
    public bool HasDefaultSint32 {
      get { return hasDefaultSint32; }
    }
    public int DefaultSint32 {
      get { return defaultSint32_; }
    }

    public const int DefaultSint64FieldNumber = 66;
    private bool hasDefaultSint64;
    private long defaultSint64_ = 46L;
    public bool HasDefaultSint64 {
      get { return hasDefaultSint64; }
    }
    public long DefaultSint64 {
      get { return defaultSint64_; }
    }

    public const int DefaultFixed32FieldNumber = 67;
    private bool hasDefaultFixed32;
    private uint defaultFixed32_ = 47;
    public bool HasDefaultFixed32 {
      get { return hasDefaultFixed32; }
    }
    public uint DefaultFixed32 {
      get { return defaultFixed32_; }
    }

    public const int DefaultFixed64FieldNumber = 68;
    private bool hasDefaultFixed64;
    private ulong defaultFixed64_ = 48UL;
    public bool HasDefaultFixed64 {
      get { return hasDefaultFixed64; }
    }
    public ulong DefaultFixed64 {
      get { return defaultFixed64_; }
    }

    public const int DefaultSfixed32FieldNumber = 69;
    private bool hasDefaultSfixed32;
    private int defaultSfixed32_ = 49;
    public bool HasDefaultSfixed32 {
      get { return hasDefaultSfixed32; }
    }
    public int DefaultSfixed32 {
      get { return defaultSfixed32_; }
    }

    public const int DefaultSfixed64FieldNumber = 70;
    private bool hasDefaultSfixed64;
    private long defaultSfixed64_ = -50L;
    public bool HasDefaultSfixed64 {
      get { return hasDefaultSfixed64; }
    }
    public long DefaultSfixed64 {
      get { return defaultSfixed64_; }
    }

    public const int DefaultFloatFieldNumber = 71;
    private bool hasDefaultFloat;
    private float defaultFloat_ = 51.5F;
    public bool HasDefaultFloat {
      get { return hasDefaultFloat; }
    }
    public float DefaultFloat {
      get { return defaultFloat_; }
    }

    public const int DefaultDoubleFieldNumber = 72;
    private bool hasDefaultDouble;
    private double defaultDouble_ = 52000D;
    public bool HasDefaultDouble {
      get { return hasDefaultDouble; }
    }
    public double DefaultDouble {
      get { return defaultDouble_; }
    }

    public const int DefaultBoolFieldNumber = 73;
    private bool hasDefaultBool;
    private bool defaultBool_ = true;
    public bool HasDefaultBool {
      get { return hasDefaultBool; }
    }
    public bool DefaultBool {
      get { return defaultBool_; }
    }

    public const int DefaultStringFieldNumber = 74;
    private bool hasDefaultString;
    private string defaultString_ = "hello";
    public bool HasDefaultString {
      get { return hasDefaultString; }
    }
    public string DefaultString {
      get { return defaultString_; }
    }

    public const int DefaultBytesFieldNumber = 75;
    private bool hasDefaultBytes;
    private pb::ByteString defaultBytes_ = pb::ByteString.FromBase64("d29ybGQ=");
    public bool HasDefaultBytes {
      get { return hasDefaultBytes; }
    }
    public pb::ByteString DefaultBytes {
      get { return defaultBytes_; }
    }

    public const int DefaultNestedEnumFieldNumber = 81;
    private bool hasDefaultNestedEnum;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR;
    public bool HasDefaultNestedEnum {
      get { return hasDefaultNestedEnum; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum DefaultNestedEnum {
      get { return defaultNestedEnum_; }
    }

    public const int DefaultForeignEnumFieldNumber = 82;
    private bool hasDefaultForeignEnum;
    private global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR;
    public bool HasDefaultForeignEnum {
      get { return hasDefaultForeignEnum; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite DefaultForeignEnum {
      get { return defaultForeignEnum_; }
    }

    public const int DefaultImportEnumFieldNumber = 83;
    private bool hasDefaultImportEnum;
    private global::Google.ProtocolBuffers.TestProtos.ImportEnumLite defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR;
    public bool HasDefaultImportEnum {
      get { return hasDefaultImportEnum; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite DefaultImportEnum {
      get { return defaultImportEnum_; }
    }

    public const int DefaultStringPieceFieldNumber = 84;
    private bool hasDefaultStringPiece;
    private string defaultStringPiece_ = "abc";
    public bool HasDefaultStringPiece {
      get { return hasDefaultStringPiece; }
    }
    public string DefaultStringPiece {
      get { return defaultStringPiece_; }
    }

    public const int DefaultCordFieldNumber = 85;
    private bool hasDefaultCord;
    private string defaultCord_ = "123";
    public bool HasDefaultCord {
      get { return hasDefaultCord; }
    }
    public string DefaultCord {
      get { return defaultCord_; }
    }

    public const int OneofUint32FieldNumber = 111;
    public bool HasOneofUint32 {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32; }
    }
    public uint OneofUint32 {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) oneofField_ : 0; }
    }

    public const int OneofNestedMessageFieldNumber = 112;
    public bool HasOneofNestedMessage {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OneofNestedMessage {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage) oneofField_ : global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }
    }

    public const int OneofStringFieldNumber = 113;
    public bool HasOneofString {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString; }
    }
    public string OneofString {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) oneofField_ : ""; }
    }

    public const int OneofBytesFieldNumber = 114;
    public bool HasOneofBytes {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofBytes; }
    }
    public pb::ByteString OneofBytes {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofBytes ? (pb::ByteString) oneofField_ : pb::ByteString.Empty; }
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testAllTypesLiteFieldNames;
      if (hasOptionalInt32) {
        output.WriteInt32(1, field_names[35], OptionalInt32);
      }
      if (hasOptionalInt64) {
        output.WriteInt64(2, field_names[36], OptionalInt64);
      }
      if (hasOptionalUint32) {
        output.WriteUInt32(3, field_names[47], OptionalUint32);
      }
      if (hasOptionalUint64) {
        output.WriteUInt64(4, field_names[48], OptionalUint64);
      }
      if (hasOptionalSint32) {
        output.WriteSInt32(5, field_names[43], OptionalSint32);
      }
      if (hasOptionalSint64) {
        output.WriteSInt64(6, field_names[44], OptionalSint64);
      }
      if (hasOptionalFixed32) {
        output.WriteFixed32(7, field_names[28], OptionalFixed32);
      }
      if (hasOptionalFixed64) {
        output.WriteFixed64(8, field_names[29], OptionalFixed64);
      }
      if (hasOptionalSfixed32) {
        output.WriteSFixed32(9, field_names[41], OptionalSfixed32);
      }
      if (hasOptionalSfixed64) {
        output.WriteSFixed64(10, field_names[42], OptionalSfixed64);
      }
      if (hasOptionalFloat) {
        output.WriteFloat(11, field_names[30], OptionalFloat);
      }
      if (hasOptionalDouble) {
        output.WriteDouble(12, field_names[27], OptionalDouble);
      }
      if (hasOptionalBool) {
        output.WriteBool(13, field_names[24], OptionalBool);
      }
      if (hasOptionalString) {
        output.WriteString(14, field_names[45], OptionalString);
      }
      if (hasOptionalBytes) {
        output.WriteBytes(15, field_names[25], OptionalBytes);
      }
      if (hasOptionalGroup) {
        output.WriteGroup(16, field_names[49], OptionalGroup);
      }
      if (hasOptionalNestedMessage) {
        output.WriteMessage(18, field_names[39], OptionalNestedMessage);
      }
      if (hasOptionalForeignMessage) {
        output.WriteMessage(19, field_names[32], OptionalForeignMessage);
      }
      if (hasOptionalImportMessage) {
        output.WriteMessage(20, field_names[34], OptionalImportMessage);
      }
      if (hasOptionalNestedEnum) {
        output.WriteEnum(21, field_names[38], (int) OptionalNestedEnum, OptionalNestedEnum);
      }
      if (hasOptionalForeignEnum) {
        output.WriteEnum(22, field_names[31], (int) OptionalForeignEnum, OptionalForeignEnum);
      }
      if (hasOptionalImportEnum) {
        output.WriteEnum(23, field_names[33], (int) OptionalImportEnum, OptionalImportEnum);
      }
      if (hasOptionalStringPiece) {
        output.WriteString(24, field_names[46], OptionalStringPiece);
      }
      if (hasOptionalCord) {
        output.WriteString(25, field_names[26], OptionalCord);
      }
      if (hasOptionalPublicImportMessage) {
        output.WriteMessage(26, field_names[40], OptionalPublicImportMessage);
      }
      if (hasOptionalLazyMessage) {
        output.WriteMessage(27, field_names[37], OptionalLazyMessage);
      }
      if (repeatedInt32_.Count > 0) {
        output.WriteInt32Array(31, field_names[61], repeatedInt32_);
      }
      if (repeatedInt64_.Count > 0) {
        output.WriteInt64Array(32, field_names[62], repeatedInt64_);
      }
      if (repeatedUint32_.Count > 0) {
        output.WriteUInt32Array(33, field_names[72], repeatedUint32_);
      }
      if (repeatedUint64_.Count > 0) {
        output.WriteUInt64Array(34, field_names[73], repeatedUint64_);
      }
      if (repeatedSint32_.Count > 0) {
        output.WriteSInt32Array(35, field_names[68], repeatedSint32_);
      }
      if (repeatedSint64_.Count > 0) {
        output.WriteSInt64Array(36, field_names[69], repeatedSint64_);
      }
      if (repeatedFixed32_.Count > 0) {
        output.WriteFixed32Array(37, field_names[54], repeatedFixed32_);
      }
      if (repeatedFixed64_.Count > 0) {
        output.WriteFixed64Array(38, field_names[55], repeatedFixed64_);
      }
      if (repeatedSfixed32_.Count > 0) {
        output.WriteSFixed32Array(39, field_names[66], repeatedSfixed32_);
      }
      if (repeatedSfixed64_.Count > 0) {
        output.WriteSFixed64Array(40, field_names[67], repeatedSfixed64_);
      }
      if (repeatedFloat_.Count > 0) {
        output.WriteFloatArray(41, field_names[56], repeatedFloat_);
      }
      if (repeatedDouble_.Count > 0) {
        output.WriteDoubleArray(42, field_names[53], repeatedDouble_);
      }
      if (repeatedBool_.Count > 0) {
        output.WriteBoolArray(43, field_names[50], repeatedBool_);
      }
      if (repeatedString_.Count > 0) {
        output.WriteStringArray(44, field_names[70], repeatedString_);
      }
      if (repeatedBytes_.Count > 0) {
        output.WriteBytesArray(45, field_names[51], repeatedBytes_);
      }
      if (repeatedGroup_.Count > 0) {
        output.WriteGroupArray(46, field_names[74], repeatedGroup_);
      }
      if (repeatedNestedMessage_.Count > 0) {
        output.WriteMessageArray(48, field_names[65], repeatedNestedMessage_);
      }
      if (repeatedForeignMessage_.Count > 0) {
        output.WriteMessageArray(49, field_names[58], repeatedForeignMessage_);
      }
      if (repeatedImportMessage_.Count > 0) {
        output.WriteMessageArray(50, field_names[60], repeatedImportMessage_);
      }
      if (repeatedNestedEnum_.Count > 0) {
        output.WriteEnumArray(51, field_names[64], repeatedNestedEnum_);
      }
      if (repeatedForeignEnum_.Count > 0) {
        output.WriteEnumArray(52, field_names[57], repeatedForeignEnum_);
      }
      if (repeatedImportEnum_.Count > 0) {
        output.WriteEnumArray(53, field_names[59], repeatedImportEnum_);
      }
      if (repeatedStringPiece_.Count > 0) {
        output.WriteStringArray(54, field_names[71], repeatedStringPiece_);
      }
      if (repeatedCord_.Count > 0) {
        output.WriteStringArray(55, field_names[52], repeatedCord_);
      }
      if (repeatedLazyMessage_.Count > 0) {
        output.WriteMessageArray(57, field_names[63], repeatedLazyMessage_);
      }
      if (hasDefaultInt32) {
        output.WriteInt32(61, field_names[9], DefaultInt32);
      }
      if (hasDefaultInt64) {
        output.WriteInt64(62, field_names[10], DefaultInt64);
      }
      if (hasDefaultUint32) {
        output.WriteUInt32(63, field_names[18], DefaultUint32);
      }
      if (hasDefaultUint64) {
        output.WriteUInt64(64, field_names[19], DefaultUint64);
      }
      if (hasDefaultSint32) {
        output.WriteSInt32(65, field_names[14], DefaultSint32);
      }
      if (hasDefaultSint64) {
        output.WriteSInt64(66, field_names[15], DefaultSint64);
      }
      if (hasDefaultFixed32) {
        output.WriteFixed32(67, field_names[4], DefaultFixed32);
      }
      if (hasDefaultFixed64) {
        output.WriteFixed64(68, field_names[5], DefaultFixed64);
      }
      if (hasDefaultSfixed32) {
        output.WriteSFixed32(69, field_names[12], DefaultSfixed32);
      }
      if (hasDefaultSfixed64) {
        output.WriteSFixed64(70, field_names[13], DefaultSfixed64);
      }
      if (hasDefaultFloat) {
        output.WriteFloat(71, field_names[6], DefaultFloat);
      }
      if (hasDefaultDouble) {
        output.WriteDouble(72, field_names[3], DefaultDouble);
      }
      if (hasDefaultBool) {
        output.WriteBool(73, field_names[0], DefaultBool);
      }
      if (hasDefaultString) {
        output.WriteString(74, field_names[16], DefaultString);
      }
      if (hasDefaultBytes) {
        output.WriteBytes(75, field_names[1], DefaultBytes);
      }
      if (hasDefaultNestedEnum) {
        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);
      }
      if (hasDefaultForeignEnum) {
        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);
      }
      if (hasDefaultImportEnum) {
        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);
      }
      if (hasDefaultStringPiece) {
        output.WriteString(84, field_names[17], DefaultStringPiece);
      }
      if (hasDefaultCord) {
        output.WriteString(85, field_names[2], DefaultCord);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
        output.WriteUInt32(111, field_names[23], OneofUint32);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
        output.WriteMessage(112, field_names[21], OneofNestedMessage);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
        output.WriteString(113, field_names[22], OneofString);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
        output.WriteBytes(114, field_names[20], OneofBytes);
      }
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (hasOptionalInt32) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);
      }
      if (hasOptionalInt64) {
        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);
      }
      if (hasOptionalUint32) {
        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);
      }
      if (hasOptionalUint64) {
        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);
      }
      if (hasOptionalSint32) {
        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);
      }
      if (hasOptionalSint64) {
        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);
      }
      if (hasOptionalFixed32) {
        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);
      }
      if (hasOptionalFixed64) {
        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);
      }
      if (hasOptionalSfixed32) {
        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);
      }
      if (hasOptionalSfixed64) {
        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);
      }
      if (hasOptionalFloat) {
        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);
      }
      if (hasOptionalDouble) {
        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);
      }
      if (hasOptionalBool) {
        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);
      }
      if (hasOptionalString) {
        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);
      }
      if (hasOptionalBytes) {
        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);
      }
      if (hasOptionalGroup) {
        size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);
      }
      if (hasOptionalNestedMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);
      }
      if (hasOptionalForeignMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);
      }
      if (hasOptionalImportMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);
      }
      if (hasOptionalNestedEnum) {
        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);
      }
      if (hasOptionalForeignEnum) {
        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);
      }
      if (hasOptionalImportEnum) {
        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);
      }
      if (hasOptionalStringPiece) {
        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);
      }
      if (hasOptionalCord) {
        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);
      }
      if (hasOptionalPublicImportMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(26, OptionalPublicImportMessage);
      }
      if (hasOptionalLazyMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(27, OptionalLazyMessage);
      }
      {
        int dataSize = 0;
        foreach (int element in RepeatedInt32List) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedInt32_.Count;
      }
      {
        int dataSize = 0;
        foreach (long element in RepeatedInt64List) {
          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedInt64_.Count;
      }
      {
        int dataSize = 0;
        foreach (uint element in RepeatedUint32List) {
          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedUint32_.Count;
      }
      {
        int dataSize = 0;
        foreach (ulong element in RepeatedUint64List) {
          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedUint64_.Count;
      }
      {
        int dataSize = 0;
        foreach (int element in RepeatedSint32List) {
          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedSint32_.Count;
      }
      {
        int dataSize = 0;
        foreach (long element in RepeatedSint64List) {
          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedSint64_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedFixed32_.Count;
        size += dataSize;
        size += 2 * repeatedFixed32_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedFixed64_.Count;
        size += dataSize;
        size += 2 * repeatedFixed64_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedSfixed32_.Count;
        size += dataSize;
        size += 2 * repeatedSfixed32_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedSfixed64_.Count;
        size += dataSize;
        size += 2 * repeatedSfixed64_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedFloat_.Count;
        size += dataSize;
        size += 2 * repeatedFloat_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedDouble_.Count;
        size += dataSize;
        size += 2 * repeatedDouble_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 1 * repeatedBool_.Count;
        size += dataSize;
        size += 2 * repeatedBool_.Count;
      }
      {
        int dataSize = 0;
        foreach (string element in RepeatedStringList) {
          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedString_.Count;
      }
      {
        int dataSize = 0;
        foreach (pb::ByteString element in RepeatedBytesList) {
          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedBytes_.Count;
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup element in RepeatedGroupList) {
        size += pb::CodedOutputStream.ComputeGroupSize(46, element);
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage element in RepeatedNestedMessageList) {
        size += pb::CodedOutputStream.ComputeMessageSize(48, element);
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite element in RepeatedForeignMessageList) {
        size += pb::CodedOutputStream.ComputeMessageSize(49, element);
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessageLite element in RepeatedImportMessageList) {
        size += pb::CodedOutputStream.ComputeMessageSize(50, element);
      }
      {
        int dataSize = 0;
        if (repeatedNestedEnum_.Count > 0) {
          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum element in repeatedNestedEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2 * repeatedNestedEnum_.Count;
        }
      }
      {
        int dataSize = 0;
        if (repeatedForeignEnum_.Count > 0) {
          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite element in repeatedForeignEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2 * repeatedForeignEnum_.Count;
        }
      }
      {
        int dataSize = 0;
        if (repeatedImportEnum_.Count > 0) {
          foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnumLite element in repeatedImportEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2 * repeatedImportEnum_.Count;
        }
      }
      {
        int dataSize = 0;
        foreach (string element in RepeatedStringPieceList) {
          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedStringPiece_.Count;
      }
      {
        int dataSize = 0;
        foreach (string element in RepeatedCordList) {
          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedCord_.Count;
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage element in RepeatedLazyMessageList) {
        size += pb::CodedOutputStream.ComputeMessageSize(57, element);
      }
      if (hasDefaultInt32) {
        size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);
      }
      if (hasDefaultInt64) {
        size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);
      }
      if (hasDefaultUint32) {
        size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);
      }
      if (hasDefaultUint64) {
        size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);
      }
      if (hasDefaultSint32) {
        size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);
      }
      if (hasDefaultSint64) {
        size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);
      }
      if (hasDefaultFixed32) {
        size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);
      }
      if (hasDefaultFixed64) {
        size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);
      }
      if (hasDefaultSfixed32) {
        size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);
      }
      if (hasDefaultSfixed64) {
        size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);
      }
      if (hasDefaultFloat) {
        size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);
      }
      if (hasDefaultDouble) {
        size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);
      }
      if (hasDefaultBool) {
        size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);
      }
      if (hasDefaultString) {
        size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);
      }
      if (hasDefaultBytes) {
        size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);
      }
      if (hasDefaultNestedEnum) {
        size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);
      }
      if (hasDefaultForeignEnum) {
        size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);
      }
      if (hasDefaultImportEnum) {
        size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);
      }
      if (hasDefaultStringPiece) {
        size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);
      }
      if (hasDefaultCord) {
        size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
        size += pb::CodedOutputStream.ComputeUInt32Size(111, OneofUint32);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(112, OneofNestedMessage);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
        size += pb::CodedOutputStream.ComputeStringSize(113, OneofString);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
        size += pb::CodedOutputStream.ComputeBytesSize(114, OneofBytes);
      }
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      if (hasOptionalInt32) {
        hash ^= optionalInt32_.GetHashCode();
      }
      if (hasOptionalInt64) {
        hash ^= optionalInt64_.GetHashCode();
      }
      if (hasOptionalUint32) {
        hash ^= optionalUint32_.GetHashCode();
      }
      if (hasOptionalUint64) {
        hash ^= optionalUint64_.GetHashCode();
      }
      if (hasOptionalSint32) {
        hash ^= optionalSint32_.GetHashCode();
      }
      if (hasOptionalSint64) {
        hash ^= optionalSint64_.GetHashCode();
      }
      if (hasOptionalFixed32) {
        hash ^= optionalFixed32_.GetHashCode();
      }
      if (hasOptionalFixed64) {
        hash ^= optionalFixed64_.GetHashCode();
      }
      if (hasOptionalSfixed32) {
        hash ^= optionalSfixed32_.GetHashCode();
      }
      if (hasOptionalSfixed64) {
        hash ^= optionalSfixed64_.GetHashCode();
      }
      if (hasOptionalFloat) {
        hash ^= optionalFloat_.GetHashCode();
      }
      if (hasOptionalDouble) {
        hash ^= optionalDouble_.GetHashCode();
      }
      if (hasOptionalBool) {
        hash ^= optionalBool_.GetHashCode();
      }
      if (hasOptionalString) {
        hash ^= optionalString_.GetHashCode();
      }
      if (hasOptionalBytes) {
        hash ^= optionalBytes_.GetHashCode();
      }
      if (hasOptionalGroup) hash ^= optionalGroup_.GetHashCode();
      if (hasOptionalNestedMessage) hash ^= optionalNestedMessage_.GetHashCode();
      if (hasOptionalForeignMessage) hash ^= optionalForeignMessage_.GetHashCode();
      if (hasOptionalImportMessage) hash ^= optionalImportMessage_.GetHashCode();
      if (hasOptionalNestedEnum) {
        hash ^= optionalNestedEnum_.GetHashCode();
      }
      if (hasOptionalForeignEnum) {
        hash ^= optionalForeignEnum_.GetHashCode();
      }
      if (hasOptionalImportEnum) {
        hash ^= optionalImportEnum_.GetHashCode();
      }
      if (hasOptionalStringPiece) {
        hash ^= optionalStringPiece_.GetHashCode();
      }
      if (hasOptionalCord) {
        hash ^= optionalCord_.GetHashCode();
      }
      if (hasOptionalPublicImportMessage) hash ^= optionalPublicImportMessage_.GetHashCode();
      if (hasOptionalLazyMessage) hash ^= optionalLazyMessage_.GetHashCode();
      foreach(int i in repeatedInt32_)
        hash ^= i.GetHashCode();
      foreach(long i in repeatedInt64_)
        hash ^= i.GetHashCode();
      foreach(uint i in repeatedUint32_)
        hash ^= i.GetHashCode();
      foreach(ulong i in repeatedUint64_)
        hash ^= i.GetHashCode();
      foreach(int i in repeatedSint32_)
        hash ^= i.GetHashCode();
      foreach(long i in repeatedSint64_)
        hash ^= i.GetHashCode();
      foreach(uint i in repeatedFixed32_)
        hash ^= i.GetHashCode();
      foreach(ulong i in repeatedFixed64_)
        hash ^= i.GetHashCode();
      foreach(int i in repeatedSfixed32_)
        hash ^= i.GetHashCode();
      foreach(long i in repeatedSfixed64_)
        hash ^= i.GetHashCode();
      foreach(float i in repeatedFloat_)
        hash ^= i.GetHashCode();
      foreach(double i in repeatedDouble_)
        hash ^= i.GetHashCode();
      foreach(bool i in repeatedBool_)
        hash ^= i.GetHashCode();
      foreach(string i in repeatedString_)
        hash ^= i.GetHashCode();
      foreach(pb::ByteString i in repeatedBytes_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup i in repeatedGroup_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage i in repeatedNestedMessage_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite i in repeatedForeignMessage_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite i in repeatedImportMessage_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum i in repeatedNestedEnum_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite i in repeatedForeignEnum_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite i in repeatedImportEnum_)
        hash ^= i.GetHashCode();
      foreach(string i in repeatedStringPiece_)
        hash ^= i.GetHashCode();
      foreach(string i in repeatedCord_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage i in repeatedLazyMessage_)
        hash ^= i.GetHashCode();
      if (hasDefaultInt32) {
        hash ^= defaultInt32_.GetHashCode();
      }
      if (hasDefaultInt64) {
        hash ^= defaultInt64_.GetHashCode();
      }
      if (hasDefaultUint32) {
        hash ^= defaultUint32_.GetHashCode();
      }
      if (hasDefaultUint64) {
        hash ^= defaultUint64_.GetHashCode();
      }
      if (hasDefaultSint32) {
        hash ^= defaultSint32_.GetHashCode();
      }
      if (hasDefaultSint64) {
        hash ^= defaultSint64_.GetHashCode();
      }
      if (hasDefaultFixed32) {
        hash ^= defaultFixed32_.GetHashCode();
      }
      if (hasDefaultFixed64) {
        hash ^= defaultFixed64_.GetHashCode();
      }
      if (hasDefaultSfixed32) {
        hash ^= defaultSfixed32_.GetHashCode();
      }
      if (hasDefaultSfixed64) {
        hash ^= defaultSfixed64_.GetHashCode();
      }
      if (hasDefaultFloat) {
        hash ^= defaultFloat_.GetHashCode();
      }
      if (hasDefaultDouble) {
        hash ^= defaultDouble_.GetHashCode();
      }
      if (hasDefaultBool) {
        hash ^= defaultBool_.GetHashCode();
      }
      if (hasDefaultString) {
        hash ^= defaultString_.GetHashCode();
      }
      if (hasDefaultBytes) {
        hash ^= defaultBytes_.GetHashCode();
      }
      if (hasDefaultNestedEnum) {
        hash ^= defaultNestedEnum_.GetHashCode();
      }
      if (hasDefaultForeignEnum) {
        hash ^= defaultForeignEnum_.GetHashCode();
      }
      if (hasDefaultImportEnum) {
        hash ^= defaultImportEnum_.GetHashCode();
      }
      if (hasDefaultStringPiece) {
        hash ^= defaultStringPiece_.GetHashCode();
      }
      if (hasDefaultCord) {
        hash ^= defaultCord_.GetHashCode();
      }
      if (oneofFieldCase_ != OneofFieldOneofCase.None) {
        hash ^= oneofField_.GetHashCode();
      }
      return hash;
    }

    public override bool Equals(object obj) {
      TestAllTypesLite other = obj as TestAllTypesLite;
      if (other == null) return false;
      if (hasOptionalInt32 != other.hasOptionalInt32 || (hasOptionalInt32 && !optionalInt32_.Equals(other.optionalInt32_))) return false;
      if (hasOptionalInt64 != other.hasOptionalInt64 || (hasOptionalInt64 && !optionalInt64_.Equals(other.optionalInt64_))) return false;
      if (hasOptionalUint32 != other.hasOptionalUint32 || (hasOptionalUint32 && !optionalUint32_.Equals(other.optionalUint32_))) return false;
      if (hasOptionalUint64 != other.hasOptionalUint64 || (hasOptionalUint64 && !optionalUint64_.Equals(other.optionalUint64_))) return false;
      if (hasOptionalSint32 != other.hasOptionalSint32 || (hasOptionalSint32 && !optionalSint32_.Equals(other.optionalSint32_))) return false;
      if (hasOptionalSint64 != other.hasOptionalSint64 || (hasOptionalSint64 && !optionalSint64_.Equals(other.optionalSint64_))) return false;
      if (hasOptionalFixed32 != other.hasOptionalFixed32 || (hasOptionalFixed32 && !optionalFixed32_.Equals(other.optionalFixed32_))) return false;
      if (hasOptionalFixed64 != other.hasOptionalFixed64 || (hasOptionalFixed64 && !optionalFixed64_.Equals(other.optionalFixed64_))) return false;
      if (hasOptionalSfixed32 != other.hasOptionalSfixed32 || (hasOptionalSfixed32 && !optionalSfixed32_.Equals(other.optionalSfixed32_))) return false;
      if (hasOptionalSfixed64 != other.hasOptionalSfixed64 || (hasOptionalSfixed64 && !optionalSfixed64_.Equals(other.optionalSfixed64_))) return false;
      if (hasOptionalFloat != other.hasOptionalFloat || (hasOptionalFloat && !optionalFloat_.Equals(other.optionalFloat_))) return false;
      if (hasOptionalDouble != other.hasOptionalDouble || (hasOptionalDouble && !optionalDouble_.Equals(other.optionalDouble_))) return false;
      if (hasOptionalBool != other.hasOptionalBool || (hasOptionalBool && !optionalBool_.Equals(other.optionalBool_))) return false;
      if (hasOptionalString != other.hasOptionalString || (hasOptionalString && !optionalString_.Equals(other.optionalString_))) return false;
      if (hasOptionalBytes != other.hasOptionalBytes || (hasOptionalBytes && !optionalBytes_.Equals(other.optionalBytes_))) return false;
      if (hasOptionalGroup != other.hasOptionalGroup || (hasOptionalGroup && !optionalGroup_.Equals(other.optionalGroup_))) return false;
      if (hasOptionalNestedMessage != other.hasOptionalNestedMessage || (hasOptionalNestedMessage && !optionalNestedMessage_.Equals(other.optionalNestedMessage_))) return false;
      if (hasOptionalForeignMessage != other.hasOptionalForeignMessage || (hasOptionalForeignMessage && !optionalForeignMessage_.Equals(other.optionalForeignMessage_))) return false;
      if (hasOptionalImportMessage != other.hasOptionalImportMessage || (hasOptionalImportMessage && !optionalImportMessage_.Equals(other.optionalImportMessage_))) return false;
      if (hasOptionalNestedEnum != other.hasOptionalNestedEnum || (hasOptionalNestedEnum && !optionalNestedEnum_.Equals(other.optionalNestedEnum_))) return false;
      if (hasOptionalForeignEnum != other.hasOptionalForeignEnum || (hasOptionalForeignEnum && !optionalForeignEnum_.Equals(other.optionalForeignEnum_))) return false;
      if (hasOptionalImportEnum != other.hasOptionalImportEnum || (hasOptionalImportEnum && !optionalImportEnum_.Equals(other.optionalImportEnum_))) return false;
      if (hasOptionalStringPiece != other.hasOptionalStringPiece || (hasOptionalStringPiece && !optionalStringPiece_.Equals(other.optionalStringPiece_))) return false;
      if (hasOptionalCord != other.hasOptionalCord || (hasOptionalCord && !optionalCord_.Equals(other.optionalCord_))) return false;
      if (hasOptionalPublicImportMessage != other.hasOptionalPublicImportMessage || (hasOptionalPublicImportMessage && !optionalPublicImportMessage_.Equals(other.optionalPublicImportMessage_))) return false;
      if (hasOptionalLazyMessage != other.hasOptionalLazyMessage || (hasOptionalLazyMessage && !optionalLazyMessage_.Equals(other.optionalLazyMessage_))) return false;
      if(repeatedInt32_.Count != other.repeatedInt32_.Count) return false;
      for(int ix=0; ix < repeatedInt32_.Count; ix++)
        if(!repeatedInt32_[ix].Equals(other.repeatedInt32_[ix])) return false;
      if(repeatedInt64_.Count != other.repeatedInt64_.Count) return false;
      for(int ix=0; ix < repeatedInt64_.Count; ix++)
        if(!repeatedInt64_[ix].Equals(other.repeatedInt64_[ix])) return false;
      if(repeatedUint32_.Count != other.repeatedUint32_.Count) return false;
      for(int ix=0; ix < repeatedUint32_.Count; ix++)
        if(!repeatedUint32_[ix].Equals(other.repeatedUint32_[ix])) return false;
      if(repeatedUint64_.Count != other.repeatedUint64_.Count) return false;
      for(int ix=0; ix < repeatedUint64_.Count; ix++)
        if(!repeatedUint64_[ix].Equals(other.repeatedUint64_[ix])) return false;
      if(repeatedSint32_.Count != other.repeatedSint32_.Count) return false;
      for(int ix=0; ix < repeatedSint32_.Count; ix++)
        if(!repeatedSint32_[ix].Equals(other.repeatedSint32_[ix])) return false;
      if(repeatedSint64_.Count != other.repeatedSint64_.Count) return false;
      for(int ix=0; ix < repeatedSint64_.Count; ix++)
        if(!repeatedSint64_[ix].Equals(other.repeatedSint64_[ix])) return false;
      if(repeatedFixed32_.Count != other.repeatedFixed32_.Count) return false;
      for(int ix=0; ix < repeatedFixed32_.Count; ix++)
        if(!repeatedFixed32_[ix].Equals(other.repeatedFixed32_[ix])) return false;
      if(repeatedFixed64_.Count != other.repeatedFixed64_.Count) return false;
      for(int ix=0; ix < repeatedFixed64_.Count; ix++)
        if(!repeatedFixed64_[ix].Equals(other.repeatedFixed64_[ix])) return false;
      if(repeatedSfixed32_.Count != other.repeatedSfixed32_.Count) return false;
      for(int ix=0; ix < repeatedSfixed32_.Count; ix++)
        if(!repeatedSfixed32_[ix].Equals(other.repeatedSfixed32_[ix])) return false;
      if(repeatedSfixed64_.Count != other.repeatedSfixed64_.Count) return false;
      for(int ix=0; ix < repeatedSfixed64_.Count; ix++)
        if(!repeatedSfixed64_[ix].Equals(other.repeatedSfixed64_[ix])) return false;
      if(repeatedFloat_.Count != other.repeatedFloat_.Count) return false;
      for(int ix=0; ix < repeatedFloat_.Count; ix++)
        if(!repeatedFloat_[ix].Equals(other.repeatedFloat_[ix])) return false;
      if(repeatedDouble_.Count != other.repeatedDouble_.Count) return false;
      for(int ix=0; ix < repeatedDouble_.Count; ix++)
        if(!repeatedDouble_[ix].Equals(other.repeatedDouble_[ix])) return false;
      if(repeatedBool_.Count != other.repeatedBool_.Count) return false;
      for(int ix=0; ix < repeatedBool_.Count; ix++)
        if(!repeatedBool_[ix].Equals(other.repeatedBool_[ix])) return false;
      if(repeatedString_.Count != other.repeatedString_.Count) return false;
      for(int ix=0; ix < repeatedString_.Count; ix++)
        if(!repeatedString_[ix].Equals(other.repeatedString_[ix])) return false;
      if(repeatedBytes_.Count != other.repeatedBytes_.Count) return false;
      for(int ix=0; ix < repeatedBytes_.Count; ix++)
        if(!repeatedBytes_[ix].Equals(other.repeatedBytes_[ix])) return false;
      if(repeatedGroup_.Count != other.repeatedGroup_.Count) return false;
      for(int ix=0; ix < repeatedGroup_.Count; ix++)
        if(!repeatedGroup_[ix].Equals(other.repeatedGroup_[ix])) return false;
      if(repeatedNestedMessage_.Count != other.repeatedNestedMessage_.Count) return false;
      for(int ix=0; ix < repeatedNestedMessage_.Count; ix++)
        if(!repeatedNestedMessage_[ix].Equals(other.repeatedNestedMessage_[ix])) return false;
      if(repeatedForeignMessage_.Count != other.repeatedForeignMessage_.Count) return false;
      for(int ix=0; ix < repeatedForeignMessage_.Count; ix++)
        if(!repeatedForeignMessage_[ix].Equals(other.repeatedForeignMessage_[ix])) return false;
      if(repeatedImportMessage_.Count != other.repeatedImportMessage_.Count) return false;
      for(int ix=0; ix < repeatedImportMessage_.Count; ix++)
        if(!repeatedImportMessage_[ix].Equals(other.repeatedImportMessage_[ix])) return false;
      if(repeatedNestedEnum_.Count != other.repeatedNestedEnum_.Count) return false;
      for(int ix=0; ix < repeatedNestedEnum_.Count; ix++)
        if(!repeatedNestedEnum_[ix].Equals(other.repeatedNestedEnum_[ix])) return false;
      if(repeatedForeignEnum_.Count != other.repeatedForeignEnum_.Count) return false;
      for(int ix=0; ix < repeatedForeignEnum_.Count; ix++)
        if(!repeatedForeignEnum_[ix].Equals(other.repeatedForeignEnum_[ix])) return false;
      if(repeatedImportEnum_.Count != other.repeatedImportEnum_.Count) return false;
      for(int ix=0; ix < repeatedImportEnum_.Count; ix++)
        if(!repeatedImportEnum_[ix].Equals(other.repeatedImportEnum_[ix])) return false;
      if(repeatedStringPiece_.Count != other.repeatedStringPiece_.Count) return false;
      for(int ix=0; ix < repeatedStringPiece_.Count; ix++)
        if(!repeatedStringPiece_[ix].Equals(other.repeatedStringPiece_[ix])) return false;
      if(repeatedCord_.Count != other.repeatedCord_.Count) return false;
      for(int ix=0; ix < repeatedCord_.Count; ix++)
        if(!repeatedCord_[ix].Equals(other.repeatedCord_[ix])) return false;
      if(repeatedLazyMessage_.Count != other.repeatedLazyMessage_.Count) return false;
      for(int ix=0; ix < repeatedLazyMessage_.Count; ix++)
        if(!repeatedLazyMessage_[ix].Equals(other.repeatedLazyMessage_[ix])) return false;
      if (hasDefaultInt32 != other.hasDefaultInt32 || (hasDefaultInt32 && !defaultInt32_.Equals(other.defaultInt32_))) return false;
      if (hasDefaultInt64 != other.hasDefaultInt64 || (hasDefaultInt64 && !defaultInt64_.Equals(other.defaultInt64_))) return false;
      if (hasDefaultUint32 != other.hasDefaultUint32 || (hasDefaultUint32 && !defaultUint32_.Equals(other.defaultUint32_))) return false;
      if (hasDefaultUint64 != other.hasDefaultUint64 || (hasDefaultUint64 && !defaultUint64_.Equals(other.defaultUint64_))) return false;
      if (hasDefaultSint32 != other.hasDefaultSint32 || (hasDefaultSint32 && !defaultSint32_.Equals(other.defaultSint32_))) return false;
      if (hasDefaultSint64 != other.hasDefaultSint64 || (hasDefaultSint64 && !defaultSint64_.Equals(other.defaultSint64_))) return false;
      if (hasDefaultFixed32 != other.hasDefaultFixed32 || (hasDefaultFixed32 && !defaultFixed32_.Equals(other.defaultFixed32_))) return false;
      if (hasDefaultFixed64 != other.hasDefaultFixed64 || (hasDefaultFixed64 && !defaultFixed64_.Equals(other.defaultFixed64_))) return false;
      if (hasDefaultSfixed32 != other.hasDefaultSfixed32 || (hasDefaultSfixed32 && !defaultSfixed32_.Equals(other.defaultSfixed32_))) return false;
      if (hasDefaultSfixed64 != other.hasDefaultSfixed64 || (hasDefaultSfixed64 && !defaultSfixed64_.Equals(other.defaultSfixed64_))) return false;
      if (hasDefaultFloat != other.hasDefaultFloat || (hasDefaultFloat && !defaultFloat_.Equals(other.defaultFloat_))) return false;
      if (hasDefaultDouble != other.hasDefaultDouble || (hasDefaultDouble && !defaultDouble_.Equals(other.defaultDouble_))) return false;
      if (hasDefaultBool != other.hasDefaultBool || (hasDefaultBool && !defaultBool_.Equals(other.defaultBool_))) return false;
      if (hasDefaultString != other.hasDefaultString || (hasDefaultString && !defaultString_.Equals(other.defaultString_))) return false;
      if (hasDefaultBytes != other.hasDefaultBytes || (hasDefaultBytes && !defaultBytes_.Equals(other.defaultBytes_))) return false;
      if (hasDefaultNestedEnum != other.hasDefaultNestedEnum || (hasDefaultNestedEnum && !defaultNestedEnum_.Equals(other.defaultNestedEnum_))) return false;
      if (hasDefaultForeignEnum != other.hasDefaultForeignEnum || (hasDefaultForeignEnum && !defaultForeignEnum_.Equals(other.defaultForeignEnum_))) return false;
      if (hasDefaultImportEnum != other.hasDefaultImportEnum || (hasDefaultImportEnum && !defaultImportEnum_.Equals(other.defaultImportEnum_))) return false;
      if (hasDefaultStringPiece != other.hasDefaultStringPiece || (hasDefaultStringPiece && !defaultStringPiece_.Equals(other.defaultStringPiece_))) return false;
      if (hasDefaultCord != other.hasDefaultCord || (hasDefaultCord && !defaultCord_.Equals(other.defaultCord_))) return false;
      if (!OneofUint32.Equals(other.OneofUint32)) return false;
      if (!OneofNestedMessage.Equals(other.OneofNestedMessage)) return false;
      if (!OneofString.Equals(other.OneofString)) return false;
      if (!OneofBytes.Equals(other.OneofBytes)) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("optional_int32", hasOptionalInt32, optionalInt32_, writer);
      PrintField("optional_int64", hasOptionalInt64, optionalInt64_, writer);
      PrintField("optional_uint32", hasOptionalUint32, optionalUint32_, writer);
      PrintField("optional_uint64", hasOptionalUint64, optionalUint64_, writer);
      PrintField("optional_sint32", hasOptionalSint32, optionalSint32_, writer);
      PrintField("optional_sint64", hasOptionalSint64, optionalSint64_, writer);
      PrintField("optional_fixed32", hasOptionalFixed32, optionalFixed32_, writer);
      PrintField("optional_fixed64", hasOptionalFixed64, optionalFixed64_, writer);
      PrintField("optional_sfixed32", hasOptionalSfixed32, optionalSfixed32_, writer);
      PrintField("optional_sfixed64", hasOptionalSfixed64, optionalSfixed64_, writer);
      PrintField("optional_float", hasOptionalFloat, optionalFloat_, writer);
      PrintField("optional_double", hasOptionalDouble, optionalDouble_, writer);
      PrintField("optional_bool", hasOptionalBool, optionalBool_, writer);
      PrintField("optional_string", hasOptionalString, optionalString_, writer);
      PrintField("optional_bytes", hasOptionalBytes, optionalBytes_, writer);
      PrintField("OptionalGroup", hasOptionalGroup, optionalGroup_, writer);
      PrintField("optional_nested_message", hasOptionalNestedMessage, optionalNestedMessage_, writer);
      PrintField("optional_foreign_message", hasOptionalForeignMessage, optionalForeignMessage_, writer);
      PrintField("optional_import_message", hasOptionalImportMessage, optionalImportMessage_, writer);
      PrintField("optional_nested_enum", hasOptionalNestedEnum, optionalNestedEnum_, writer);
      PrintField("optional_foreign_enum", hasOptionalForeignEnum, optionalForeignEnum_, writer);
      PrintField("optional_import_enum", hasOptionalImportEnum, optionalImportEnum_, writer);
      PrintField("optional_string_piece", hasOptionalStringPiece, optionalStringPiece_, writer);
      PrintField("optional_cord", hasOptionalCord, optionalCord_, writer);
      PrintField("optional_public_import_message", hasOptionalPublicImportMessage, optionalPublicImportMessage_, writer);
      PrintField("optional_lazy_message", hasOptionalLazyMessage, optionalLazyMessage_, writer);
      PrintField("repeated_int32", repeatedInt32_, writer);
      PrintField("repeated_int64", repeatedInt64_, writer);
      PrintField("repeated_uint32", repeatedUint32_, writer);
      PrintField("repeated_uint64", repeatedUint64_, writer);
      PrintField("repeated_sint32", repeatedSint32_, writer);
      PrintField("repeated_sint64", repeatedSint64_, writer);
      PrintField("repeated_fixed32", repeatedFixed32_, writer);
      PrintField("repeated_fixed64", repeatedFixed64_, writer);
      PrintField("repeated_sfixed32", repeatedSfixed32_, writer);
      PrintField("repeated_sfixed64", repeatedSfixed64_, writer);
      PrintField("repeated_float", repeatedFloat_, writer);
      PrintField("repeated_double", repeatedDouble_, writer);
      PrintField("repeated_bool", repeatedBool_, writer);
      PrintField("repeated_string", repeatedString_, writer);
      PrintField("repeated_bytes", repeatedBytes_, writer);
      PrintField("RepeatedGroup", repeatedGroup_, writer);
      PrintField("repeated_nested_message", repeatedNestedMessage_, writer);
      PrintField("repeated_foreign_message", repeatedForeignMessage_, writer);
      PrintField("repeated_import_message", repeatedImportMessage_, writer);
      PrintField("repeated_nested_enum", repeatedNestedEnum_, writer);
      PrintField("repeated_foreign_enum", repeatedForeignEnum_, writer);
      PrintField("repeated_import_enum", repeatedImportEnum_, writer);
      PrintField("repeated_string_piece", repeatedStringPiece_, writer);
      PrintField("repeated_cord", repeatedCord_, writer);
      PrintField("repeated_lazy_message", repeatedLazyMessage_, writer);
      PrintField("default_int32", hasDefaultInt32, defaultInt32_, writer);
      PrintField("default_int64", hasDefaultInt64, defaultInt64_, writer);
      PrintField("default_uint32", hasDefaultUint32, defaultUint32_, writer);
      PrintField("default_uint64", hasDefaultUint64, defaultUint64_, writer);
      PrintField("default_sint32", hasDefaultSint32, defaultSint32_, writer);
      PrintField("default_sint64", hasDefaultSint64, defaultSint64_, writer);
      PrintField("default_fixed32", hasDefaultFixed32, defaultFixed32_, writer);
      PrintField("default_fixed64", hasDefaultFixed64, defaultFixed64_, writer);
      PrintField("default_sfixed32", hasDefaultSfixed32, defaultSfixed32_, writer);
      PrintField("default_sfixed64", hasDefaultSfixed64, defaultSfixed64_, writer);
      PrintField("default_float", hasDefaultFloat, defaultFloat_, writer);
      PrintField("default_double", hasDefaultDouble, defaultDouble_, writer);
      PrintField("default_bool", hasDefaultBool, defaultBool_, writer);
      PrintField("default_string", hasDefaultString, defaultString_, writer);
      PrintField("default_bytes", hasDefaultBytes, defaultBytes_, writer);
      PrintField("default_nested_enum", hasDefaultNestedEnum, defaultNestedEnum_, writer);
      PrintField("default_foreign_enum", hasDefaultForeignEnum, defaultForeignEnum_, writer);
      PrintField("default_import_enum", hasDefaultImportEnum, defaultImportEnum_, writer);
      PrintField("default_string_piece", hasDefaultStringPiece, defaultStringPiece_, writer);
      PrintField("default_cord", hasDefaultCord, defaultCord_, writer);
      PrintField("oneof_uint32", oneofFieldCase_ == OneofFieldOneofCase.OneofUint32, oneofField_, writer);
      PrintField("oneof_nested_message", oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage, oneofField_, writer);
      PrintField("oneof_string", oneofFieldCase_ == OneofFieldOneofCase.OneofString, oneofField_, writer);
      PrintField("oneof_bytes", oneofFieldCase_ == OneofFieldOneofCase.OneofBytes, oneofField_, writer);
    }
    #endregion

    public static TestAllTypesLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestAllTypesLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestAllTypesLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestAllTypesLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestAllTypesLite MakeReadOnly() {
      repeatedInt32_.MakeReadOnly();
      repeatedInt64_.MakeReadOnly();
      repeatedUint32_.MakeReadOnly();
      repeatedUint64_.MakeReadOnly();
      repeatedSint32_.MakeReadOnly();
      repeatedSint64_.MakeReadOnly();
      repeatedFixed32_.MakeReadOnly();
      repeatedFixed64_.MakeReadOnly();
      repeatedSfixed32_.MakeReadOnly();
      repeatedSfixed64_.MakeReadOnly();
      repeatedFloat_.MakeReadOnly();
      repeatedDouble_.MakeReadOnly();
      repeatedBool_.MakeReadOnly();
      repeatedString_.MakeReadOnly();
      repeatedBytes_.MakeReadOnly();
      repeatedGroup_.MakeReadOnly();
      repeatedNestedMessage_.MakeReadOnly();
      repeatedForeignMessage_.MakeReadOnly();
      repeatedImportMessage_.MakeReadOnly();
      repeatedNestedEnum_.MakeReadOnly();
      repeatedForeignEnum_.MakeReadOnly();
      repeatedImportEnum_.MakeReadOnly();
      repeatedStringPiece_.MakeReadOnly();
      repeatedCord_.MakeReadOnly();
      repeatedLazyMessage_.MakeReadOnly();
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestAllTypesLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<TestAllTypesLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestAllTypesLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestAllTypesLite result;

      private TestAllTypesLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestAllTypesLite original = result;
          result = new TestAllTypesLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestAllTypesLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestAllTypesLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
      }

      public override TestAllTypesLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestAllTypesLite) {
          return MergeFrom((TestAllTypesLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestAllTypesLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.HasOptionalInt32) {
          OptionalInt32 = other.OptionalInt32;
        }
        if (other.HasOptionalInt64) {
          OptionalInt64 = other.OptionalInt64;
        }
        if (other.HasOptionalUint32) {
          OptionalUint32 = other.OptionalUint32;
        }
        if (other.HasOptionalUint64) {
          OptionalUint64 = other.OptionalUint64;
        }
        if (other.HasOptionalSint32) {
          OptionalSint32 = other.OptionalSint32;
        }
        if (other.HasOptionalSint64) {
          OptionalSint64 = other.OptionalSint64;
        }
        if (other.HasOptionalFixed32) {
          OptionalFixed32 = other.OptionalFixed32;
        }
        if (other.HasOptionalFixed64) {
          OptionalFixed64 = other.OptionalFixed64;
        }
        if (other.HasOptionalSfixed32) {
          OptionalSfixed32 = other.OptionalSfixed32;
        }
        if (other.HasOptionalSfixed64) {
          OptionalSfixed64 = other.OptionalSfixed64;
        }
        if (other.HasOptionalFloat) {
          OptionalFloat = other.OptionalFloat;
        }
        if (other.HasOptionalDouble) {
          OptionalDouble = other.OptionalDouble;
        }
        if (other.HasOptionalBool) {
          OptionalBool = other.OptionalBool;
        }
        if (other.HasOptionalString) {
          OptionalString = other.OptionalString;
        }
        if (other.HasOptionalBytes) {
          OptionalBytes = other.OptionalBytes;
        }
        if (other.HasOptionalGroup) {
          MergeOptionalGroup(other.OptionalGroup);
        }
        if (other.HasOptionalNestedMessage) {
          MergeOptionalNestedMessage(other.OptionalNestedMessage);
        }
        if (other.HasOptionalForeignMessage) {
          MergeOptionalForeignMessage(other.OptionalForeignMessage);
        }
        if (other.HasOptionalImportMessage) {
          MergeOptionalImportMessage(other.OptionalImportMessage);
        }
        if (other.HasOptionalNestedEnum) {
          OptionalNestedEnum = other.OptionalNestedEnum;
        }
        if (other.HasOptionalForeignEnum) {
          OptionalForeignEnum = other.OptionalForeignEnum;
        }
        if (other.HasOptionalImportEnum) {
          OptionalImportEnum = other.OptionalImportEnum;
        }
        if (other.HasOptionalStringPiece) {
          OptionalStringPiece = other.OptionalStringPiece;
        }
        if (other.HasOptionalCord) {
          OptionalCord = other.OptionalCord;
        }
        if (other.HasOptionalPublicImportMessage) {
          MergeOptionalPublicImportMessage(other.OptionalPublicImportMessage);
        }
        if (other.HasOptionalLazyMessage) {
          MergeOptionalLazyMessage(other.OptionalLazyMessage);
        }
        if (other.repeatedInt32_.Count != 0) {
          result.repeatedInt32_.Add(other.repeatedInt32_);
        }
        if (other.repeatedInt64_.Count != 0) {
          result.repeatedInt64_.Add(other.repeatedInt64_);
        }
        if (other.repeatedUint32_.Count != 0) {
          result.repeatedUint32_.Add(other.repeatedUint32_);
        }
        if (other.repeatedUint64_.Count != 0) {
          result.repeatedUint64_.Add(other.repeatedUint64_);
        }
        if (other.repeatedSint32_.Count != 0) {
          result.repeatedSint32_.Add(other.repeatedSint32_);
        }
        if (other.repeatedSint64_.Count != 0) {
          result.repeatedSint64_.Add(other.repeatedSint64_);
        }
        if (other.repeatedFixed32_.Count != 0) {
          result.repeatedFixed32_.Add(other.repeatedFixed32_);
        }
        if (other.repeatedFixed64_.Count != 0) {
          result.repeatedFixed64_.Add(other.repeatedFixed64_);
        }
        if (other.repeatedSfixed32_.Count != 0) {
          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);
        }
        if (other.repeatedSfixed64_.Count != 0) {
          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);
        }
        if (other.repeatedFloat_.Count != 0) {
          result.repeatedFloat_.Add(other.repeatedFloat_);
        }
        if (other.repeatedDouble_.Count != 0) {
          result.repeatedDouble_.Add(other.repeatedDouble_);
        }
        if (other.repeatedBool_.Count != 0) {
          result.repeatedBool_.Add(other.repeatedBool_);
        }
        if (other.repeatedString_.Count != 0) {
          result.repeatedString_.Add(other.repeatedString_);
        }
        if (other.repeatedBytes_.Count != 0) {
          result.repeatedBytes_.Add(other.repeatedBytes_);
        }
        if (other.repeatedGroup_.Count != 0) {
          result.repeatedGroup_.Add(other.repeatedGroup_);
        }
        if (other.repeatedNestedMessage_.Count != 0) {
          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);
        }
        if (other.repeatedForeignMessage_.Count != 0) {
          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);
        }
        if (other.repeatedImportMessage_.Count != 0) {
          result.repeatedImportMessage_.Add(other.repeatedImportMessage_);
        }
        if (other.repeatedNestedEnum_.Count != 0) {
          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);
        }
        if (other.repeatedForeignEnum_.Count != 0) {
          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);
        }
        if (other.repeatedImportEnum_.Count != 0) {
          result.repeatedImportEnum_.Add(other.repeatedImportEnum_);
        }
        if (other.repeatedStringPiece_.Count != 0) {
          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);
        }
        if (other.repeatedCord_.Count != 0) {
          result.repeatedCord_.Add(other.repeatedCord_);
        }
        if (other.repeatedLazyMessage_.Count != 0) {
          result.repeatedLazyMessage_.Add(other.repeatedLazyMessage_);
        }
        if (other.HasDefaultInt32) {
          DefaultInt32 = other.DefaultInt32;
        }
        if (other.HasDefaultInt64) {
          DefaultInt64 = other.DefaultInt64;
        }
        if (other.HasDefaultUint32) {
          DefaultUint32 = other.DefaultUint32;
        }
        if (other.HasDefaultUint64) {
          DefaultUint64 = other.DefaultUint64;
        }
        if (other.HasDefaultSint32) {
          DefaultSint32 = other.DefaultSint32;
        }
        if (other.HasDefaultSint64) {
          DefaultSint64 = other.DefaultSint64;
        }
        if (other.HasDefaultFixed32) {
          DefaultFixed32 = other.DefaultFixed32;
        }
        if (other.HasDefaultFixed64) {
          DefaultFixed64 = other.DefaultFixed64;
        }
        if (other.HasDefaultSfixed32) {
          DefaultSfixed32 = other.DefaultSfixed32;
        }
        if (other.HasDefaultSfixed64) {
          DefaultSfixed64 = other.DefaultSfixed64;
        }
        if (other.HasDefaultFloat) {
          DefaultFloat = other.DefaultFloat;
        }
        if (other.HasDefaultDouble) {
          DefaultDouble = other.DefaultDouble;
        }
        if (other.HasDefaultBool) {
          DefaultBool = other.DefaultBool;
        }
        if (other.HasDefaultString) {
          DefaultString = other.DefaultString;
        }
        if (other.HasDefaultBytes) {
          DefaultBytes = other.DefaultBytes;
        }
        if (other.HasDefaultNestedEnum) {
          DefaultNestedEnum = other.DefaultNestedEnum;
        }
        if (other.HasDefaultForeignEnum) {
          DefaultForeignEnum = other.DefaultForeignEnum;
        }
        if (other.HasDefaultImportEnum) {
          DefaultImportEnum = other.DefaultImportEnum;
        }
        if (other.HasDefaultStringPiece) {
          DefaultStringPiece = other.DefaultStringPiece;
        }
        if (other.HasDefaultCord) {
          DefaultCord = other.DefaultCord;
        }
        switch (other.OneofFieldCase) {
          case OneofFieldOneofCase.OneofUint32: {
            SetOneofUint32(other.OneofUint32);
            break;
          }
          case OneofFieldOneofCase.OneofNestedMessage: {
            MergeOneofNestedMessage(other.OneofNestedMessage);
            break;
          }
          case OneofFieldOneofCase.OneofString: {
            SetOneofString(other.OneofString);
            break;
          }
          case OneofFieldOneofCase.OneofBytes: {
            SetOneofBytes(other.OneofBytes);
            break;
          }
          case OneofFieldOneofCase.None: { break; }
        }
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testAllTypesLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 8: {
              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);
              break;
            }
            case 16: {
              result.hasOptionalInt64 = input.ReadInt64(ref result.optionalInt64_);
              break;
            }
            case 24: {
              result.hasOptionalUint32 = input.ReadUInt32(ref result.optionalUint32_);
              break;
            }
            case 32: {
              result.hasOptionalUint64 = input.ReadUInt64(ref result.optionalUint64_);
              break;
            }
            case 40: {
              result.hasOptionalSint32 = input.ReadSInt32(ref result.optionalSint32_);
              break;
            }
            case 48: {
              result.hasOptionalSint64 = input.ReadSInt64(ref result.optionalSint64_);
              break;
            }
            case 61: {
              result.hasOptionalFixed32 = input.ReadFixed32(ref result.optionalFixed32_);
              break;
            }
            case 65: {
              result.hasOptionalFixed64 = input.ReadFixed64(ref result.optionalFixed64_);
              break;
            }
            case 77: {
              result.hasOptionalSfixed32 = input.ReadSFixed32(ref result.optionalSfixed32_);
              break;
            }
            case 81: {
              result.hasOptionalSfixed64 = input.ReadSFixed64(ref result.optionalSfixed64_);
              break;
            }
            case 93: {
              result.hasOptionalFloat = input.ReadFloat(ref result.optionalFloat_);
              break;
            }
            case 97: {
              result.hasOptionalDouble = input.ReadDouble(ref result.optionalDouble_);
              break;
            }
            case 104: {
              result.hasOptionalBool = input.ReadBool(ref result.optionalBool_);
              break;
            }
            case 114: {
              result.hasOptionalString = input.ReadString(ref result.optionalString_);
              break;
            }
            case 122: {
              result.hasOptionalBytes = input.ReadBytes(ref result.optionalBytes_);
              break;
            }
            case 131: {
              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.CreateBuilder();
              if (result.hasOptionalGroup) {
                subBuilder.MergeFrom(OptionalGroup);
              }
              input.ReadGroup(16, subBuilder, extensionRegistry);
              OptionalGroup = subBuilder.BuildPartial();
              break;
            }
            case 146: {
              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder();
              if (result.hasOptionalNestedMessage) {
                subBuilder.MergeFrom(OptionalNestedMessage);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              OptionalNestedMessage = subBuilder.BuildPartial();
              break;
            }
            case 154: {
              global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.CreateBuilder();
              if (result.hasOptionalForeignMessage) {
                subBuilder.MergeFrom(OptionalForeignMessage);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              OptionalForeignMessage = subBuilder.BuildPartial();
              break;
            }
            case 162: {
              global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.CreateBuilder();
              if (result.hasOptionalImportMessage) {
                subBuilder.MergeFrom(OptionalImportMessage);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              OptionalImportMessage = subBuilder.BuildPartial();
              break;
            }
            case 168: {
              object unknown;
              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {
                result.hasOptionalNestedEnum = true;
              } else if(unknown is int) {
              }
              break;
            }
            case 176: {
              object unknown;
              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {
                result.hasOptionalForeignEnum = true;
              } else if(unknown is int) {
              }
              break;
            }
            case 184: {
              object unknown;
              if(input.ReadEnum(ref result.optionalImportEnum_, out unknown)) {
                result.hasOptionalImportEnum = true;
              } else if(unknown is int) {
              }
              break;
            }
            case 194: {
              result.hasOptionalStringPiece = input.ReadString(ref result.optionalStringPiece_);
              break;
            }
            case 202: {
              result.hasOptionalCord = input.ReadString(ref result.optionalCord_);
              break;
            }
            case 210: {
              global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.CreateBuilder();
              if (result.hasOptionalPublicImportMessage) {
                subBuilder.MergeFrom(OptionalPublicImportMessage);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              OptionalPublicImportMessage = subBuilder.BuildPartial();
              break;
            }
            case 218: {
              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder();
              if (result.hasOptionalLazyMessage) {
                subBuilder.MergeFrom(OptionalLazyMessage);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              OptionalLazyMessage = subBuilder.BuildPartial();
              break;
            }
            case 250:
            case 248: {
              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);
              break;
            }
            case 258:
            case 256: {
              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);
              break;
            }
            case 266:
            case 264: {
              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);
              break;
            }
            case 274:
            case 272: {
              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);
              break;
            }
            case 282:
            case 280: {
              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);
              break;
            }
            case 290:
            case 288: {
              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);
              break;
            }
            case 298:
            case 301: {
              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);
              break;
            }
            case 306:
            case 305: {
              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);
              break;
            }
            case 314:
            case 317: {
              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);
              break;
            }
            case 322:
            case 321: {
              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);
              break;
            }
            case 330:
            case 333: {
              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);
              break;
            }
            case 338:
            case 337: {
              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);
              break;
            }
            case 346:
            case 344: {
              input.ReadBoolArray(tag, field_name, result.repeatedBool_);
              break;
            }
            case 354: {
              input.ReadStringArray(tag, field_name, result.repeatedString_);
              break;
            }
            case 362: {
              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);
              break;
            }
            case 371: {
              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance, extensionRegistry);
              break;
            }
            case 386: {
              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance, extensionRegistry);
              break;
            }
            case 394: {
              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance, extensionRegistry);
              break;
            }
            case 402: {
              input.ReadMessageArray(tag, field_name, result.repeatedImportMessage_, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance, extensionRegistry);
              break;
            }
            case 410:
            case 408: {
              scg::ICollection<object> unknownItems;
              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);
              break;
            }
            case 418:
            case 416: {
              scg::ICollection<object> unknownItems;
              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);
              break;
            }
            case 426:
            case 424: {
              scg::ICollection<object> unknownItems;
              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(tag, field_name, result.repeatedImportEnum_, out unknownItems);
              break;
            }
            case 434: {
              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);
              break;
            }
            case 442: {
              input.ReadStringArray(tag, field_name, result.repeatedCord_);
              break;
            }
            case 458: {
              input.ReadMessageArray(tag, field_name, result.repeatedLazyMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance, extensionRegistry);
              break;
            }
            case 488: {
              result.hasDefaultInt32 = input.ReadInt32(ref result.defaultInt32_);
              break;
            }
            case 496: {
              result.hasDefaultInt64 = input.ReadInt64(ref result.defaultInt64_);
              break;
            }
            case 504: {
              result.hasDefaultUint32 = input.ReadUInt32(ref result.defaultUint32_);
              break;
            }
            case 512: {
              result.hasDefaultUint64 = input.ReadUInt64(ref result.defaultUint64_);
              break;
            }
            case 520: {
              result.hasDefaultSint32 = input.ReadSInt32(ref result.defaultSint32_);
              break;
            }
            case 528: {
              result.hasDefaultSint64 = input.ReadSInt64(ref result.defaultSint64_);
              break;
            }
            case 541: {
              result.hasDefaultFixed32 = input.ReadFixed32(ref result.defaultFixed32_);
              break;
            }
            case 545: {
              result.hasDefaultFixed64 = input.ReadFixed64(ref result.defaultFixed64_);
              break;
            }
            case 557: {
              result.hasDefaultSfixed32 = input.ReadSFixed32(ref result.defaultSfixed32_);
              break;
            }
            case 561: {
              result.hasDefaultSfixed64 = input.ReadSFixed64(ref result.defaultSfixed64_);
              break;
            }
            case 573: {
              result.hasDefaultFloat = input.ReadFloat(ref result.defaultFloat_);
              break;
            }
            case 577: {
              result.hasDefaultDouble = input.ReadDouble(ref result.defaultDouble_);
              break;
            }
            case 584: {
              result.hasDefaultBool = input.ReadBool(ref result.defaultBool_);
              break;
            }
            case 594: {
              result.hasDefaultString = input.ReadString(ref result.defaultString_);
              break;
            }
            case 602: {
              result.hasDefaultBytes = input.ReadBytes(ref result.defaultBytes_);
              break;
            }
            case 648: {
              object unknown;
              if(input.ReadEnum(ref result.defaultNestedEnum_, out unknown)) {
                result.hasDefaultNestedEnum = true;
              } else if(unknown is int) {
              }
              break;
            }
            case 656: {
              object unknown;
              if(input.ReadEnum(ref result.defaultForeignEnum_, out unknown)) {
                result.hasDefaultForeignEnum = true;
              } else if(unknown is int) {
              }
              break;
            }
            case 664: {
              object unknown;
              if(input.ReadEnum(ref result.defaultImportEnum_, out unknown)) {
                result.hasDefaultImportEnum = true;
              } else if(unknown is int) {
              }
              break;
            }
            case 674: {
              result.hasDefaultStringPiece = input.ReadString(ref result.defaultStringPiece_);
              break;
            }
            case 682: {
              result.hasDefaultCord = input.ReadString(ref result.defaultCord_);
              break;
            }
            case 888: {
              uint value = 0;
              if (input.ReadUInt32(ref value)) {
                result.oneofField_ = value;
                result.oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
              }
              break;
            }
            case 898: {
              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder();
              if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
                subBuilder.MergeFrom(OneofNestedMessage);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              result.oneofField_ = subBuilder.BuildPartial();
              result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
              break;
            }
            case 906: {
              string value = "";
              if (input.ReadString(ref value)) {
                result.oneofField_ = value;
                result.oneofFieldCase_ = OneofFieldOneofCase.OneofString;
              }
              break;
            }
            case 914: {
              pb::ByteString value = pb::ByteString.Empty;
              if (input.ReadBytes(ref value)) {
                result.oneofField_ = value;
                result.oneofFieldCase_ = OneofFieldOneofCase.OneofBytes;
              }
              break;
            }
          }
        }

        return this;
      }


      public bool HasOptionalInt32 {
        get { return result.hasOptionalInt32; }
      }
      public int OptionalInt32 {
        get { return result.OptionalInt32; }
        set { SetOptionalInt32(value); }
      }
      public Builder SetOptionalInt32(int value) {
        PrepareBuilder();
        result.hasOptionalInt32 = true;
        result.optionalInt32_ = value;
        return this;
      }
      public Builder ClearOptionalInt32() {
        PrepareBuilder();
        result.hasOptionalInt32 = false;
        result.optionalInt32_ = 0;
        return this;
      }

      public bool HasOptionalInt64 {
        get { return result.hasOptionalInt64; }
      }
      public long OptionalInt64 {
        get { return result.OptionalInt64; }
        set { SetOptionalInt64(value); }
      }
      public Builder SetOptionalInt64(long value) {
        PrepareBuilder();
        result.hasOptionalInt64 = true;
        result.optionalInt64_ = value;
        return this;
      }
      public Builder ClearOptionalInt64() {
        PrepareBuilder();
        result.hasOptionalInt64 = false;
        result.optionalInt64_ = 0L;
        return this;
      }

      public bool HasOptionalUint32 {
        get { return result.hasOptionalUint32; }
      }
      public uint OptionalUint32 {
        get { return result.OptionalUint32; }
        set { SetOptionalUint32(value); }
      }
      public Builder SetOptionalUint32(uint value) {
        PrepareBuilder();
        result.hasOptionalUint32 = true;
        result.optionalUint32_ = value;
        return this;
      }
      public Builder ClearOptionalUint32() {
        PrepareBuilder();
        result.hasOptionalUint32 = false;
        result.optionalUint32_ = 0;
        return this;
      }

      public bool HasOptionalUint64 {
        get { return result.hasOptionalUint64; }
      }
      public ulong OptionalUint64 {
        get { return result.OptionalUint64; }
        set { SetOptionalUint64(value); }
      }
      public Builder SetOptionalUint64(ulong value) {
        PrepareBuilder();
        result.hasOptionalUint64 = true;
        result.optionalUint64_ = value;
        return this;
      }
      public Builder ClearOptionalUint64() {
        PrepareBuilder();
        result.hasOptionalUint64 = false;
        result.optionalUint64_ = 0UL;
        return this;
      }

      public bool HasOptionalSint32 {
        get { return result.hasOptionalSint32; }
      }
      public int OptionalSint32 {
        get { return result.OptionalSint32; }
        set { SetOptionalSint32(value); }
      }
      public Builder SetOptionalSint32(int value) {
        PrepareBuilder();
        result.hasOptionalSint32 = true;
        result.optionalSint32_ = value;
        return this;
      }
      public Builder ClearOptionalSint32() {
        PrepareBuilder();
        result.hasOptionalSint32 = false;
        result.optionalSint32_ = 0;
        return this;
      }

      public bool HasOptionalSint64 {
        get { return result.hasOptionalSint64; }
      }
      public long OptionalSint64 {
        get { return result.OptionalSint64; }
        set { SetOptionalSint64(value); }
      }
      public Builder SetOptionalSint64(long value) {
        PrepareBuilder();
        result.hasOptionalSint64 = true;
        result.optionalSint64_ = value;
        return this;
      }
      public Builder ClearOptionalSint64() {
        PrepareBuilder();
        result.hasOptionalSint64 = false;
        result.optionalSint64_ = 0L;
        return this;
      }

      public bool HasOptionalFixed32 {
        get { return result.hasOptionalFixed32; }
      }
      public uint OptionalFixed32 {
        get { return result.OptionalFixed32; }
        set { SetOptionalFixed32(value); }
      }
      public Builder SetOptionalFixed32(uint value) {
        PrepareBuilder();
        result.hasOptionalFixed32 = true;
        result.optionalFixed32_ = value;
        return this;
      }
      public Builder ClearOptionalFixed32() {
        PrepareBuilder();
        result.hasOptionalFixed32 = false;
        result.optionalFixed32_ = 0;
        return this;
      }

      public bool HasOptionalFixed64 {
        get { return result.hasOptionalFixed64; }
      }
      public ulong OptionalFixed64 {
        get { return result.OptionalFixed64; }
        set { SetOptionalFixed64(value); }
      }
      public Builder SetOptionalFixed64(ulong value) {
        PrepareBuilder();
        result.hasOptionalFixed64 = true;
        result.optionalFixed64_ = value;
        return this;
      }
      public Builder ClearOptionalFixed64() {
        PrepareBuilder();
        result.hasOptionalFixed64 = false;
        result.optionalFixed64_ = 0UL;
        return this;
      }

      public bool HasOptionalSfixed32 {
        get { return result.hasOptionalSfixed32; }
      }
      public int OptionalSfixed32 {
        get { return result.OptionalSfixed32; }
        set { SetOptionalSfixed32(value); }
      }
      public Builder SetOptionalSfixed32(int value) {
        PrepareBuilder();
        result.hasOptionalSfixed32 = true;
        result.optionalSfixed32_ = value;
        return this;
      }
      public Builder ClearOptionalSfixed32() {
        PrepareBuilder();
        result.hasOptionalSfixed32 = false;
        result.optionalSfixed32_ = 0;
        return this;
      }

      public bool HasOptionalSfixed64 {
        get { return result.hasOptionalSfixed64; }
      }
      public long OptionalSfixed64 {
        get { return result.OptionalSfixed64; }
        set { SetOptionalSfixed64(value); }
      }
      public Builder SetOptionalSfixed64(long value) {
        PrepareBuilder();
        result.hasOptionalSfixed64 = true;
        result.optionalSfixed64_ = value;
        return this;
      }
      public Builder ClearOptionalSfixed64() {
        PrepareBuilder();
        result.hasOptionalSfixed64 = false;
        result.optionalSfixed64_ = 0L;
        return this;
      }

      public bool HasOptionalFloat {
        get { return result.hasOptionalFloat; }
      }
      public float OptionalFloat {
        get { return result.OptionalFloat; }
        set { SetOptionalFloat(value); }
      }
      public Builder SetOptionalFloat(float value) {
        PrepareBuilder();
        result.hasOptionalFloat = true;
        result.optionalFloat_ = value;
        return this;
      }
      public Builder ClearOptionalFloat() {
        PrepareBuilder();
        result.hasOptionalFloat = false;
        result.optionalFloat_ = 0F;
        return this;
      }

      public bool HasOptionalDouble {
        get { return result.hasOptionalDouble; }
      }
      public double OptionalDouble {
        get { return result.OptionalDouble; }
        set { SetOptionalDouble(value); }
      }
      public Builder SetOptionalDouble(double value) {
        PrepareBuilder();
        result.hasOptionalDouble = true;
        result.optionalDouble_ = value;
        return this;
      }
      public Builder ClearOptionalDouble() {
        PrepareBuilder();
        result.hasOptionalDouble = false;
        result.optionalDouble_ = 0D;
        return this;
      }

      public bool HasOptionalBool {
        get { return result.hasOptionalBool; }
      }
      public bool OptionalBool {
        get { return result.OptionalBool; }
        set { SetOptionalBool(value); }
      }
      public Builder SetOptionalBool(bool value) {
        PrepareBuilder();
        result.hasOptionalBool = true;
        result.optionalBool_ = value;
        return this;
      }
      public Builder ClearOptionalBool() {
        PrepareBuilder();
        result.hasOptionalBool = false;
        result.optionalBool_ = false;
        return this;
      }

      public bool HasOptionalString {
        get { return result.hasOptionalString; }
      }
      public string OptionalString {
        get { return result.OptionalString; }
        set { SetOptionalString(value); }
      }
      public Builder SetOptionalString(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalString = true;
        result.optionalString_ = value;
        return this;
      }
      public Builder ClearOptionalString() {
        PrepareBuilder();
        result.hasOptionalString = false;
        result.optionalString_ = "";
        return this;
      }

      public bool HasOptionalBytes {
        get { return result.hasOptionalBytes; }
      }
      public pb::ByteString OptionalBytes {
        get { return result.OptionalBytes; }
        set { SetOptionalBytes(value); }
      }
      public Builder SetOptionalBytes(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalBytes = true;
        result.optionalBytes_ = value;
        return this;
      }
      public Builder ClearOptionalBytes() {
        PrepareBuilder();
        result.hasOptionalBytes = false;
        result.optionalBytes_ = pb::ByteString.Empty;
        return this;
      }

      public bool HasOptionalGroup {
       get { return result.hasOptionalGroup; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup OptionalGroup {
        get { return result.OptionalGroup; }
        set { SetOptionalGroup(value); }
      }
      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalGroup = true;
        result.optionalGroup_ = value;
        return this;
      }
      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalGroup = true;
        result.optionalGroup_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalGroup &&
            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance) {
            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalGroup_ = value;
        }
        result.hasOptionalGroup = true;
        return this;
      }
      public Builder ClearOptionalGroup() {
        PrepareBuilder();
        result.hasOptionalGroup = false;
        result.optionalGroup_ = null;
        return this;
      }

      public bool HasOptionalNestedMessage {
       get { return result.hasOptionalNestedMessage; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OptionalNestedMessage {
        get { return result.OptionalNestedMessage; }
        set { SetOptionalNestedMessage(value); }
      }
      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalNestedMessage = true;
        result.optionalNestedMessage_ = value;
        return this;
      }
      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalNestedMessage = true;
        result.optionalNestedMessage_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalNestedMessage &&
            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) {
            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalNestedMessage_ = value;
        }
        result.hasOptionalNestedMessage = true;
        return this;
      }
      public Builder ClearOptionalNestedMessage() {
        PrepareBuilder();
        result.hasOptionalNestedMessage = false;
        result.optionalNestedMessage_ = null;
        return this;
      }

      public bool HasOptionalForeignMessage {
       get { return result.hasOptionalForeignMessage; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite OptionalForeignMessage {
        get { return result.OptionalForeignMessage; }
        set { SetOptionalForeignMessage(value); }
      }
      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalForeignMessage = true;
        result.optionalForeignMessage_ = value;
        return this;
      }
      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalForeignMessage = true;
        result.optionalForeignMessage_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalForeignMessage &&
            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance) {
            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalForeignMessage_ = value;
        }
        result.hasOptionalForeignMessage = true;
        return this;
      }
      public Builder ClearOptionalForeignMessage() {
        PrepareBuilder();
        result.hasOptionalForeignMessage = false;
        result.optionalForeignMessage_ = null;
        return this;
      }

      public bool HasOptionalImportMessage {
       get { return result.hasOptionalImportMessage; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite OptionalImportMessage {
        get { return result.OptionalImportMessage; }
        set { SetOptionalImportMessage(value); }
      }
      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalImportMessage = true;
        result.optionalImportMessage_ = value;
        return this;
      }
      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalImportMessage = true;
        result.optionalImportMessage_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalImportMessage &&
            result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance) {
            result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalImportMessage_ = value;
        }
        result.hasOptionalImportMessage = true;
        return this;
      }
      public Builder ClearOptionalImportMessage() {
        PrepareBuilder();
        result.hasOptionalImportMessage = false;
        result.optionalImportMessage_ = null;
        return this;
      }

      public bool HasOptionalNestedEnum {
        get { return result.hasOptionalNestedEnum; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum OptionalNestedEnum {
        get { return result.OptionalNestedEnum; }
        set { SetOptionalNestedEnum(value); }
      }
      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {
        PrepareBuilder();
        result.hasOptionalNestedEnum = true;
        result.optionalNestedEnum_ = value;
        return this;
      }
      public Builder ClearOptionalNestedEnum() {
        PrepareBuilder();
        result.hasOptionalNestedEnum = false;
        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.FOO;
        return this;
      }

      public bool HasOptionalForeignEnum {
        get { return result.hasOptionalForeignEnum; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite OptionalForeignEnum {
        get { return result.OptionalForeignEnum; }
        set { SetOptionalForeignEnum(value); }
      }
      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {
        PrepareBuilder();
        result.hasOptionalForeignEnum = true;
        result.optionalForeignEnum_ = value;
        return this;
      }
      public Builder ClearOptionalForeignEnum() {
        PrepareBuilder();
        result.hasOptionalForeignEnum = false;
        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_FOO;
        return this;
      }

      public bool HasOptionalImportEnum {
        get { return result.hasOptionalImportEnum; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite OptionalImportEnum {
        get { return result.OptionalImportEnum; }
        set { SetOptionalImportEnum(value); }
      }
      public Builder SetOptionalImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {
        PrepareBuilder();
        result.hasOptionalImportEnum = true;
        result.optionalImportEnum_ = value;
        return this;
      }
      public Builder ClearOptionalImportEnum() {
        PrepareBuilder();
        result.hasOptionalImportEnum = false;
        result.optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_FOO;
        return this;
      }

      public bool HasOptionalStringPiece {
        get { return result.hasOptionalStringPiece; }
      }
      public string OptionalStringPiece {
        get { return result.OptionalStringPiece; }
        set { SetOptionalStringPiece(value); }
      }
      public Builder SetOptionalStringPiece(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalStringPiece = true;
        result.optionalStringPiece_ = value;
        return this;
      }
      public Builder ClearOptionalStringPiece() {
        PrepareBuilder();
        result.hasOptionalStringPiece = false;
        result.optionalStringPiece_ = "";
        return this;
      }

      public bool HasOptionalCord {
        get { return result.hasOptionalCord; }
      }
      public string OptionalCord {
        get { return result.OptionalCord; }
        set { SetOptionalCord(value); }
      }
      public Builder SetOptionalCord(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalCord = true;
        result.optionalCord_ = value;
        return this;
      }
      public Builder ClearOptionalCord() {
        PrepareBuilder();
        result.hasOptionalCord = false;
        result.optionalCord_ = "";
        return this;
      }

      public bool HasOptionalPublicImportMessage {
       get { return result.hasOptionalPublicImportMessage; }
      }
      public global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite OptionalPublicImportMessage {
        get { return result.OptionalPublicImportMessage; }
        set { SetOptionalPublicImportMessage(value); }
      }
      public Builder SetOptionalPublicImportMessage(global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalPublicImportMessage = true;
        result.optionalPublicImportMessage_ = value;
        return this;
      }
      public Builder SetOptionalPublicImportMessage(global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalPublicImportMessage = true;
        result.optionalPublicImportMessage_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalPublicImportMessage(global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalPublicImportMessage &&
            result.optionalPublicImportMessage_ != global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.DefaultInstance) {
            result.optionalPublicImportMessage_ = global::Google.ProtocolBuffers.TestProtos.PublicImportMessageLite.CreateBuilder(result.optionalPublicImportMessage_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalPublicImportMessage_ = value;
        }
        result.hasOptionalPublicImportMessage = true;
        return this;
      }
      public Builder ClearOptionalPublicImportMessage() {
        PrepareBuilder();
        result.hasOptionalPublicImportMessage = false;
        result.optionalPublicImportMessage_ = null;
        return this;
      }

      public bool HasOptionalLazyMessage {
       get { return result.hasOptionalLazyMessage; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OptionalLazyMessage {
        get { return result.OptionalLazyMessage; }
        set { SetOptionalLazyMessage(value); }
      }
      public Builder SetOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalLazyMessage = true;
        result.optionalLazyMessage_ = value;
        return this;
      }
      public Builder SetOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalLazyMessage = true;
        result.optionalLazyMessage_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalLazyMessage &&
            result.optionalLazyMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) {
            result.optionalLazyMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder(result.optionalLazyMessage_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalLazyMessage_ = value;
        }
        result.hasOptionalLazyMessage = true;
        return this;
      }
      public Builder ClearOptionalLazyMessage() {
        PrepareBuilder();
        result.hasOptionalLazyMessage = false;
        result.optionalLazyMessage_ = null;
        return this;
      }

      public pbc::IPopsicleList<int> RepeatedInt32List {
        get { return PrepareBuilder().repeatedInt32_; }
      }
      public int RepeatedInt32Count {
        get { return result.RepeatedInt32Count; }
      }
      public int GetRepeatedInt32(int index) {
        return result.GetRepeatedInt32(index);
      }
      public Builder SetRepeatedInt32(int index, int value) {
        PrepareBuilder();
        result.repeatedInt32_[index] = value;
        return this;
      }
      public Builder AddRepeatedInt32(int value) {
        PrepareBuilder();
        result.repeatedInt32_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {
        PrepareBuilder();
        result.repeatedInt32_.Add(values);
        return this;
      }
      public Builder ClearRepeatedInt32() {
        PrepareBuilder();
        result.repeatedInt32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<long> RepeatedInt64List {
        get { return PrepareBuilder().repeatedInt64_; }
      }
      public int RepeatedInt64Count {
        get { return result.RepeatedInt64Count; }
      }
      public long GetRepeatedInt64(int index) {
        return result.GetRepeatedInt64(index);
      }
      public Builder SetRepeatedInt64(int index, long value) {
        PrepareBuilder();
        result.repeatedInt64_[index] = value;
        return this;
      }
      public Builder AddRepeatedInt64(long value) {
        PrepareBuilder();
        result.repeatedInt64_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {
        PrepareBuilder();
        result.repeatedInt64_.Add(values);
        return this;
      }
      public Builder ClearRepeatedInt64() {
        PrepareBuilder();
        result.repeatedInt64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<uint> RepeatedUint32List {
        get { return PrepareBuilder().repeatedUint32_; }
      }
      public int RepeatedUint32Count {
        get { return result.RepeatedUint32Count; }
      }
      public uint GetRepeatedUint32(int index) {
        return result.GetRepeatedUint32(index);
      }
      public Builder SetRepeatedUint32(int index, uint value) {
        PrepareBuilder();
        result.repeatedUint32_[index] = value;
        return this;
      }
      public Builder AddRepeatedUint32(uint value) {
        PrepareBuilder();
        result.repeatedUint32_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {
        PrepareBuilder();
        result.repeatedUint32_.Add(values);
        return this;
      }
      public Builder ClearRepeatedUint32() {
        PrepareBuilder();
        result.repeatedUint32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<ulong> RepeatedUint64List {
        get { return PrepareBuilder().repeatedUint64_; }
      }
      public int RepeatedUint64Count {
        get { return result.RepeatedUint64Count; }
      }
      public ulong GetRepeatedUint64(int index) {
        return result.GetRepeatedUint64(index);
      }
      public Builder SetRepeatedUint64(int index, ulong value) {
        PrepareBuilder();
        result.repeatedUint64_[index] = value;
        return this;
      }
      public Builder AddRepeatedUint64(ulong value) {
        PrepareBuilder();
        result.repeatedUint64_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {
        PrepareBuilder();
        result.repeatedUint64_.Add(values);
        return this;
      }
      public Builder ClearRepeatedUint64() {
        PrepareBuilder();
        result.repeatedUint64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<int> RepeatedSint32List {
        get { return PrepareBuilder().repeatedSint32_; }
      }
      public int RepeatedSint32Count {
        get { return result.RepeatedSint32Count; }
      }
      public int GetRepeatedSint32(int index) {
        return result.GetRepeatedSint32(index);
      }
      public Builder SetRepeatedSint32(int index, int value) {
        PrepareBuilder();
        result.repeatedSint32_[index] = value;
        return this;
      }
      public Builder AddRepeatedSint32(int value) {
        PrepareBuilder();
        result.repeatedSint32_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {
        PrepareBuilder();
        result.repeatedSint32_.Add(values);
        return this;
      }
      public Builder ClearRepeatedSint32() {
        PrepareBuilder();
        result.repeatedSint32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<long> RepeatedSint64List {
        get { return PrepareBuilder().repeatedSint64_; }
      }
      public int RepeatedSint64Count {
        get { return result.RepeatedSint64Count; }
      }
      public long GetRepeatedSint64(int index) {
        return result.GetRepeatedSint64(index);
      }
      public Builder SetRepeatedSint64(int index, long value) {
        PrepareBuilder();
        result.repeatedSint64_[index] = value;
        return this;
      }
      public Builder AddRepeatedSint64(long value) {
        PrepareBuilder();
        result.repeatedSint64_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {
        PrepareBuilder();
        result.repeatedSint64_.Add(values);
        return this;
      }
      public Builder ClearRepeatedSint64() {
        PrepareBuilder();
        result.repeatedSint64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<uint> RepeatedFixed32List {
        get { return PrepareBuilder().repeatedFixed32_; }
      }
      public int RepeatedFixed32Count {
        get { return result.RepeatedFixed32Count; }
      }
      public uint GetRepeatedFixed32(int index) {
        return result.GetRepeatedFixed32(index);
      }
      public Builder SetRepeatedFixed32(int index, uint value) {
        PrepareBuilder();
        result.repeatedFixed32_[index] = value;
        return this;
      }
      public Builder AddRepeatedFixed32(uint value) {
        PrepareBuilder();
        result.repeatedFixed32_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {
        PrepareBuilder();
        result.repeatedFixed32_.Add(values);
        return this;
      }
      public Builder ClearRepeatedFixed32() {
        PrepareBuilder();
        result.repeatedFixed32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<ulong> RepeatedFixed64List {
        get { return PrepareBuilder().repeatedFixed64_; }
      }
      public int RepeatedFixed64Count {
        get { return result.RepeatedFixed64Count; }
      }
      public ulong GetRepeatedFixed64(int index) {
        return result.GetRepeatedFixed64(index);
      }
      public Builder SetRepeatedFixed64(int index, ulong value) {
        PrepareBuilder();
        result.repeatedFixed64_[index] = value;
        return this;
      }
      public Builder AddRepeatedFixed64(ulong value) {
        PrepareBuilder();
        result.repeatedFixed64_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {
        PrepareBuilder();
        result.repeatedFixed64_.Add(values);
        return this;
      }
      public Builder ClearRepeatedFixed64() {
        PrepareBuilder();
        result.repeatedFixed64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<int> RepeatedSfixed32List {
        get { return PrepareBuilder().repeatedSfixed32_; }
      }
      public int RepeatedSfixed32Count {
        get { return result.RepeatedSfixed32Count; }
      }
      public int GetRepeatedSfixed32(int index) {
        return result.GetRepeatedSfixed32(index);
      }
      public Builder SetRepeatedSfixed32(int index, int value) {
        PrepareBuilder();
        result.repeatedSfixed32_[index] = value;
        return this;
      }
      public Builder AddRepeatedSfixed32(int value) {
        PrepareBuilder();
        result.repeatedSfixed32_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {
        PrepareBuilder();
        result.repeatedSfixed32_.Add(values);
        return this;
      }
      public Builder ClearRepeatedSfixed32() {
        PrepareBuilder();
        result.repeatedSfixed32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<long> RepeatedSfixed64List {
        get { return PrepareBuilder().repeatedSfixed64_; }
      }
      public int RepeatedSfixed64Count {
        get { return result.RepeatedSfixed64Count; }
      }
      public long GetRepeatedSfixed64(int index) {
        return result.GetRepeatedSfixed64(index);
      }
      public Builder SetRepeatedSfixed64(int index, long value) {
        PrepareBuilder();
        result.repeatedSfixed64_[index] = value;
        return this;
      }
      public Builder AddRepeatedSfixed64(long value) {
        PrepareBuilder();
        result.repeatedSfixed64_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {
        PrepareBuilder();
        result.repeatedSfixed64_.Add(values);
        return this;
      }
      public Builder ClearRepeatedSfixed64() {
        PrepareBuilder();
        result.repeatedSfixed64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<float> RepeatedFloatList {
        get { return PrepareBuilder().repeatedFloat_; }
      }
      public int RepeatedFloatCount {
        get { return result.RepeatedFloatCount; }
      }
      public float GetRepeatedFloat(int index) {
        return result.GetRepeatedFloat(index);
      }
      public Builder SetRepeatedFloat(int index, float value) {
        PrepareBuilder();
        result.repeatedFloat_[index] = value;
        return this;
      }
      public Builder AddRepeatedFloat(float value) {
        PrepareBuilder();
        result.repeatedFloat_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {
        PrepareBuilder();
        result.repeatedFloat_.Add(values);
        return this;
      }
      public Builder ClearRepeatedFloat() {
        PrepareBuilder();
        result.repeatedFloat_.Clear();
        return this;
      }

      public pbc::IPopsicleList<double> RepeatedDoubleList {
        get { return PrepareBuilder().repeatedDouble_; }
      }
      public int RepeatedDoubleCount {
        get { return result.RepeatedDoubleCount; }
      }
      public double GetRepeatedDouble(int index) {
        return result.GetRepeatedDouble(index);
      }
      public Builder SetRepeatedDouble(int index, double value) {
        PrepareBuilder();
        result.repeatedDouble_[index] = value;
        return this;
      }
      public Builder AddRepeatedDouble(double value) {
        PrepareBuilder();
        result.repeatedDouble_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {
        PrepareBuilder();
        result.repeatedDouble_.Add(values);
        return this;
      }
      public Builder ClearRepeatedDouble() {
        PrepareBuilder();
        result.repeatedDouble_.Clear();
        return this;
      }

      public pbc::IPopsicleList<bool> RepeatedBoolList {
        get { return PrepareBuilder().repeatedBool_; }
      }
      public int RepeatedBoolCount {
        get { return result.RepeatedBoolCount; }
      }
      public bool GetRepeatedBool(int index) {
        return result.GetRepeatedBool(index);
      }
      public Builder SetRepeatedBool(int index, bool value) {
        PrepareBuilder();
        result.repeatedBool_[index] = value;
        return this;
      }
      public Builder AddRepeatedBool(bool value) {
        PrepareBuilder();
        result.repeatedBool_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {
        PrepareBuilder();
        result.repeatedBool_.Add(values);
        return this;
      }
      public Builder ClearRepeatedBool() {
        PrepareBuilder();
        result.repeatedBool_.Clear();
        return this;
      }

      public pbc::IPopsicleList<string> RepeatedStringList {
        get { return PrepareBuilder().repeatedString_; }
      }
      public int RepeatedStringCount {
        get { return result.RepeatedStringCount; }
      }
      public string GetRepeatedString(int index) {
        return result.GetRepeatedString(index);
      }
      public Builder SetRepeatedString(int index, string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedString_[index] = value;
        return this;
      }
      public Builder AddRepeatedString(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedString_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {
        PrepareBuilder();
        result.repeatedString_.Add(values);
        return this;
      }
      public Builder ClearRepeatedString() {
        PrepareBuilder();
        result.repeatedString_.Clear();
        return this;
      }

      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {
        get { return PrepareBuilder().repeatedBytes_; }
      }
      public int RepeatedBytesCount {
        get { return result.RepeatedBytesCount; }
      }
      public pb::ByteString GetRepeatedBytes(int index) {
        return result.GetRepeatedBytes(index);
      }
      public Builder SetRepeatedBytes(int index, pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedBytes_[index] = value;
        return this;
      }
      public Builder AddRepeatedBytes(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedBytes_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {
        PrepareBuilder();
        result.repeatedBytes_.Add(values);
        return this;
      }
      public Builder ClearRepeatedBytes() {
        PrepareBuilder();
        result.repeatedBytes_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> RepeatedGroupList {
        get { return PrepareBuilder().repeatedGroup_; }
      }
      public int RepeatedGroupCount {
        get { return result.RepeatedGroupCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup GetRepeatedGroup(int index) {
        return result.GetRepeatedGroup(index);
      }
      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedGroup_[index] = value;
        return this;
      }
      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedGroup_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedGroup_.Add(value);
        return this;
      }
      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedGroup_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> values) {
        PrepareBuilder();
        result.repeatedGroup_.Add(values);
        return this;
      }
      public Builder ClearRepeatedGroup() {
        PrepareBuilder();
        result.repeatedGroup_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageList {
        get { return PrepareBuilder().repeatedNestedMessage_; }
      }
      public int RepeatedNestedMessageCount {
        get { return result.RepeatedNestedMessageCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage GetRepeatedNestedMessage(int index) {
        return result.GetRepeatedNestedMessage(index);
      }
      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedNestedMessage_[index] = value;
        return this;
      }
      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedNestedMessage_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedNestedMessage_.Add(value);
        return this;
      }
      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedNestedMessage_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> values) {
        PrepareBuilder();
        result.repeatedNestedMessage_.Add(values);
        return this;
      }
      public Builder ClearRepeatedNestedMessage() {
        PrepareBuilder();
        result.repeatedNestedMessage_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageList {
        get { return PrepareBuilder().repeatedForeignMessage_; }
      }
      public int RepeatedForeignMessageCount {
        get { return result.RepeatedForeignMessageCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite GetRepeatedForeignMessage(int index) {
        return result.GetRepeatedForeignMessage(index);
      }
      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedForeignMessage_[index] = value;
        return this;
      }
      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedForeignMessage_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedForeignMessage_.Add(value);
        return this;
      }
      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedForeignMessage_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> values) {
        PrepareBuilder();
        result.repeatedForeignMessage_.Add(values);
        return this;
      }
      public Builder ClearRepeatedForeignMessage() {
        PrepareBuilder();
        result.repeatedForeignMessage_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageList {
        get { return PrepareBuilder().repeatedImportMessage_; }
      }
      public int RepeatedImportMessageCount {
        get { return result.RepeatedImportMessageCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite GetRepeatedImportMessage(int index) {
        return result.GetRepeatedImportMessage(index);
      }
      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedImportMessage_[index] = value;
        return this;
      }
      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedImportMessage_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedImportMessage_.Add(value);
        return this;
      }
      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedImportMessage_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedImportMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> values) {
        PrepareBuilder();
        result.repeatedImportMessage_.Add(values);
        return this;
      }
      public Builder ClearRepeatedImportMessage() {
        PrepareBuilder();
        result.repeatedImportMessage_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumList {
        get { return PrepareBuilder().repeatedNestedEnum_; }
      }
      public int RepeatedNestedEnumCount {
        get { return result.RepeatedNestedEnumCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum GetRepeatedNestedEnum(int index) {
        return result.GetRepeatedNestedEnum(index);
      }
      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {
        PrepareBuilder();
        result.repeatedNestedEnum_[index] = value;
        return this;
      }
      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {
        PrepareBuilder();
        result.repeatedNestedEnum_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> values) {
        PrepareBuilder();
        result.repeatedNestedEnum_.Add(values);
        return this;
      }
      public Builder ClearRepeatedNestedEnum() {
        PrepareBuilder();
        result.repeatedNestedEnum_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumList {
        get { return PrepareBuilder().repeatedForeignEnum_; }
      }
      public int RepeatedForeignEnumCount {
        get { return result.RepeatedForeignEnumCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetRepeatedForeignEnum(int index) {
        return result.GetRepeatedForeignEnum(index);
      }
      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {
        PrepareBuilder();
        result.repeatedForeignEnum_[index] = value;
        return this;
      }
      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {
        PrepareBuilder();
        result.repeatedForeignEnum_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> values) {
        PrepareBuilder();
        result.repeatedForeignEnum_.Add(values);
        return this;
      }
      public Builder ClearRepeatedForeignEnum() {
        PrepareBuilder();
        result.repeatedForeignEnum_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumList {
        get { return PrepareBuilder().repeatedImportEnum_; }
      }
      public int RepeatedImportEnumCount {
        get { return result.RepeatedImportEnumCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite GetRepeatedImportEnum(int index) {
        return result.GetRepeatedImportEnum(index);
      }
      public Builder SetRepeatedImportEnum(int index, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {
        PrepareBuilder();
        result.repeatedImportEnum_[index] = value;
        return this;
      }
      public Builder AddRepeatedImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {
        PrepareBuilder();
        result.repeatedImportEnum_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedImportEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> values) {
        PrepareBuilder();
        result.repeatedImportEnum_.Add(values);
        return this;
      }
      public Builder ClearRepeatedImportEnum() {
        PrepareBuilder();
        result.repeatedImportEnum_.Clear();
        return this;
      }

      public pbc::IPopsicleList<string> RepeatedStringPieceList {
        get { return PrepareBuilder().repeatedStringPiece_; }
      }
      public int RepeatedStringPieceCount {
        get { return result.RepeatedStringPieceCount; }
      }
      public string GetRepeatedStringPiece(int index) {
        return result.GetRepeatedStringPiece(index);
      }
      public Builder SetRepeatedStringPiece(int index, string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedStringPiece_[index] = value;
        return this;
      }
      public Builder AddRepeatedStringPiece(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedStringPiece_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {
        PrepareBuilder();
        result.repeatedStringPiece_.Add(values);
        return this;
      }
      public Builder ClearRepeatedStringPiece() {
        PrepareBuilder();
        result.repeatedStringPiece_.Clear();
        return this;
      }

      public pbc::IPopsicleList<string> RepeatedCordList {
        get { return PrepareBuilder().repeatedCord_; }
      }
      public int RepeatedCordCount {
        get { return result.RepeatedCordCount; }
      }
      public string GetRepeatedCord(int index) {
        return result.GetRepeatedCord(index);
      }
      public Builder SetRepeatedCord(int index, string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedCord_[index] = value;
        return this;
      }
      public Builder AddRepeatedCord(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedCord_.Add(value);
        return this;
      }
      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {
        PrepareBuilder();
        result.repeatedCord_.Add(values);
        return this;
      }
      public Builder ClearRepeatedCord() {
        PrepareBuilder();
        result.repeatedCord_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedLazyMessageList {
        get { return PrepareBuilder().repeatedLazyMessage_; }
      }
      public int RepeatedLazyMessageCount {
        get { return result.RepeatedLazyMessageCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage GetRepeatedLazyMessage(int index) {
        return result.GetRepeatedLazyMessage(index);
      }
      public Builder SetRepeatedLazyMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedLazyMessage_[index] = value;
        return this;
      }
      public Builder SetRepeatedLazyMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedLazyMessage_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedLazyMessage_.Add(value);
        return this;
      }
      public Builder AddRepeatedLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedLazyMessage_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedLazyMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> values) {
        PrepareBuilder();
        result.repeatedLazyMessage_.Add(values);
        return this;
      }
      public Builder ClearRepeatedLazyMessage() {
        PrepareBuilder();
        result.repeatedLazyMessage_.Clear();
        return this;
      }

      public bool HasDefaultInt32 {
        get { return result.hasDefaultInt32; }
      }
      public int DefaultInt32 {
        get { return result.DefaultInt32; }
        set { SetDefaultInt32(value); }
      }
      public Builder SetDefaultInt32(int value) {
        PrepareBuilder();
        result.hasDefaultInt32 = true;
        result.defaultInt32_ = value;
        return this;
      }
      public Builder ClearDefaultInt32() {
        PrepareBuilder();
        result.hasDefaultInt32 = false;
        result.defaultInt32_ = 41;
        return this;
      }

      public bool HasDefaultInt64 {
        get { return result.hasDefaultInt64; }
      }
      public long DefaultInt64 {
        get { return result.DefaultInt64; }
        set { SetDefaultInt64(value); }
      }
      public Builder SetDefaultInt64(long value) {
        PrepareBuilder();
        result.hasDefaultInt64 = true;
        result.defaultInt64_ = value;
        return this;
      }
      public Builder ClearDefaultInt64() {
        PrepareBuilder();
        result.hasDefaultInt64 = false;
        result.defaultInt64_ = 42L;
        return this;
      }

      public bool HasDefaultUint32 {
        get { return result.hasDefaultUint32; }
      }
      public uint DefaultUint32 {
        get { return result.DefaultUint32; }
        set { SetDefaultUint32(value); }
      }
      public Builder SetDefaultUint32(uint value) {
        PrepareBuilder();
        result.hasDefaultUint32 = true;
        result.defaultUint32_ = value;
        return this;
      }
      public Builder ClearDefaultUint32() {
        PrepareBuilder();
        result.hasDefaultUint32 = false;
        result.defaultUint32_ = 43;
        return this;
      }

      public bool HasDefaultUint64 {
        get { return result.hasDefaultUint64; }
      }
      public ulong DefaultUint64 {
        get { return result.DefaultUint64; }
        set { SetDefaultUint64(value); }
      }
      public Builder SetDefaultUint64(ulong value) {
        PrepareBuilder();
        result.hasDefaultUint64 = true;
        result.defaultUint64_ = value;
        return this;
      }
      public Builder ClearDefaultUint64() {
        PrepareBuilder();
        result.hasDefaultUint64 = false;
        result.defaultUint64_ = 44UL;
        return this;
      }

      public bool HasDefaultSint32 {
        get { return result.hasDefaultSint32; }
      }
      public int DefaultSint32 {
        get { return result.DefaultSint32; }
        set { SetDefaultSint32(value); }
      }
      public Builder SetDefaultSint32(int value) {
        PrepareBuilder();
        result.hasDefaultSint32 = true;
        result.defaultSint32_ = value;
        return this;
      }
      public Builder ClearDefaultSint32() {
        PrepareBuilder();
        result.hasDefaultSint32 = false;
        result.defaultSint32_ = -45;
        return this;
      }

      public bool HasDefaultSint64 {
        get { return result.hasDefaultSint64; }
      }
      public long DefaultSint64 {
        get { return result.DefaultSint64; }
        set { SetDefaultSint64(value); }
      }
      public Builder SetDefaultSint64(long value) {
        PrepareBuilder();
        result.hasDefaultSint64 = true;
        result.defaultSint64_ = value;
        return this;
      }
      public Builder ClearDefaultSint64() {
        PrepareBuilder();
        result.hasDefaultSint64 = false;
        result.defaultSint64_ = 46L;
        return this;
      }

      public bool HasDefaultFixed32 {
        get { return result.hasDefaultFixed32; }
      }
      public uint DefaultFixed32 {
        get { return result.DefaultFixed32; }
        set { SetDefaultFixed32(value); }
      }
      public Builder SetDefaultFixed32(uint value) {
        PrepareBuilder();
        result.hasDefaultFixed32 = true;
        result.defaultFixed32_ = value;
        return this;
      }
      public Builder ClearDefaultFixed32() {
        PrepareBuilder();
        result.hasDefaultFixed32 = false;
        result.defaultFixed32_ = 47;
        return this;
      }

      public bool HasDefaultFixed64 {
        get { return result.hasDefaultFixed64; }
      }
      public ulong DefaultFixed64 {
        get { return result.DefaultFixed64; }
        set { SetDefaultFixed64(value); }
      }
      public Builder SetDefaultFixed64(ulong value) {
        PrepareBuilder();
        result.hasDefaultFixed64 = true;
        result.defaultFixed64_ = value;
        return this;
      }
      public Builder ClearDefaultFixed64() {
        PrepareBuilder();
        result.hasDefaultFixed64 = false;
        result.defaultFixed64_ = 48UL;
        return this;
      }

      public bool HasDefaultSfixed32 {
        get { return result.hasDefaultSfixed32; }
      }
      public int DefaultSfixed32 {
        get { return result.DefaultSfixed32; }
        set { SetDefaultSfixed32(value); }
      }
      public Builder SetDefaultSfixed32(int value) {
        PrepareBuilder();
        result.hasDefaultSfixed32 = true;
        result.defaultSfixed32_ = value;
        return this;
      }
      public Builder ClearDefaultSfixed32() {
        PrepareBuilder();
        result.hasDefaultSfixed32 = false;
        result.defaultSfixed32_ = 49;
        return this;
      }

      public bool HasDefaultSfixed64 {
        get { return result.hasDefaultSfixed64; }
      }
      public long DefaultSfixed64 {
        get { return result.DefaultSfixed64; }
        set { SetDefaultSfixed64(value); }
      }
      public Builder SetDefaultSfixed64(long value) {
        PrepareBuilder();
        result.hasDefaultSfixed64 = true;
        result.defaultSfixed64_ = value;
        return this;
      }
      public Builder ClearDefaultSfixed64() {
        PrepareBuilder();
        result.hasDefaultSfixed64 = false;
        result.defaultSfixed64_ = -50L;
        return this;
      }

      public bool HasDefaultFloat {
        get { return result.hasDefaultFloat; }
      }
      public float DefaultFloat {
        get { return result.DefaultFloat; }
        set { SetDefaultFloat(value); }
      }
      public Builder SetDefaultFloat(float value) {
        PrepareBuilder();
        result.hasDefaultFloat = true;
        result.defaultFloat_ = value;
        return this;
      }
      public Builder ClearDefaultFloat() {
        PrepareBuilder();
        result.hasDefaultFloat = false;
        result.defaultFloat_ = 51.5F;
        return this;
      }

      public bool HasDefaultDouble {
        get { return result.hasDefaultDouble; }
      }
      public double DefaultDouble {
        get { return result.DefaultDouble; }
        set { SetDefaultDouble(value); }
      }
      public Builder SetDefaultDouble(double value) {
        PrepareBuilder();
        result.hasDefaultDouble = true;
        result.defaultDouble_ = value;
        return this;
      }
      public Builder ClearDefaultDouble() {
        PrepareBuilder();
        result.hasDefaultDouble = false;
        result.defaultDouble_ = 52000D;
        return this;
      }

      public bool HasDefaultBool {
        get { return result.hasDefaultBool; }
      }
      public bool DefaultBool {
        get { return result.DefaultBool; }
        set { SetDefaultBool(value); }
      }
      public Builder SetDefaultBool(bool value) {
        PrepareBuilder();
        result.hasDefaultBool = true;
        result.defaultBool_ = value;
        return this;
      }
      public Builder ClearDefaultBool() {
        PrepareBuilder();
        result.hasDefaultBool = false;
        result.defaultBool_ = true;
        return this;
      }

      public bool HasDefaultString {
        get { return result.hasDefaultString; }
      }
      public string DefaultString {
        get { return result.DefaultString; }
        set { SetDefaultString(value); }
      }
      public Builder SetDefaultString(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasDefaultString = true;
        result.defaultString_ = value;
        return this;
      }
      public Builder ClearDefaultString() {
        PrepareBuilder();
        result.hasDefaultString = false;
        result.defaultString_ = "hello";
        return this;
      }

      public bool HasDefaultBytes {
        get { return result.hasDefaultBytes; }
      }
      public pb::ByteString DefaultBytes {
        get { return result.DefaultBytes; }
        set { SetDefaultBytes(value); }
      }
      public Builder SetDefaultBytes(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasDefaultBytes = true;
        result.defaultBytes_ = value;
        return this;
      }
      public Builder ClearDefaultBytes() {
        PrepareBuilder();
        result.hasDefaultBytes = false;
        result.defaultBytes_ = pb::ByteString.FromBase64("d29ybGQ=");
        return this;
      }

      public bool HasDefaultNestedEnum {
        get { return result.hasDefaultNestedEnum; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum DefaultNestedEnum {
        get { return result.DefaultNestedEnum; }
        set { SetDefaultNestedEnum(value); }
      }
      public Builder SetDefaultNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {
        PrepareBuilder();
        result.hasDefaultNestedEnum = true;
        result.defaultNestedEnum_ = value;
        return this;
      }
      public Builder ClearDefaultNestedEnum() {
        PrepareBuilder();
        result.hasDefaultNestedEnum = false;
        result.defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR;
        return this;
      }

      public bool HasDefaultForeignEnum {
        get { return result.hasDefaultForeignEnum; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite DefaultForeignEnum {
        get { return result.DefaultForeignEnum; }
        set { SetDefaultForeignEnum(value); }
      }
      public Builder SetDefaultForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {
        PrepareBuilder();
        result.hasDefaultForeignEnum = true;
        result.defaultForeignEnum_ = value;
        return this;
      }
      public Builder ClearDefaultForeignEnum() {
        PrepareBuilder();
        result.hasDefaultForeignEnum = false;
        result.defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR;
        return this;
      }

      public bool HasDefaultImportEnum {
        get { return result.hasDefaultImportEnum; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite DefaultImportEnum {
        get { return result.DefaultImportEnum; }
        set { SetDefaultImportEnum(value); }
      }
      public Builder SetDefaultImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {
        PrepareBuilder();
        result.hasDefaultImportEnum = true;
        result.defaultImportEnum_ = value;
        return this;
      }
      public Builder ClearDefaultImportEnum() {
        PrepareBuilder();
        result.hasDefaultImportEnum = false;
        result.defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR;
        return this;
      }

      public bool HasDefaultStringPiece {
        get { return result.hasDefaultStringPiece; }
      }
      public string DefaultStringPiece {
        get { return result.DefaultStringPiece; }
        set { SetDefaultStringPiece(value); }
      }
      public Builder SetDefaultStringPiece(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasDefaultStringPiece = true;
        result.defaultStringPiece_ = value;
        return this;
      }
      public Builder ClearDefaultStringPiece() {
        PrepareBuilder();
        result.hasDefaultStringPiece = false;
        result.defaultStringPiece_ = "abc";
        return this;
      }

      public bool HasDefaultCord {
        get { return result.hasDefaultCord; }
      }
      public string DefaultCord {
        get { return result.DefaultCord; }
        set { SetDefaultCord(value); }
      }
      public Builder SetDefaultCord(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasDefaultCord = true;
        result.defaultCord_ = value;
        return this;
      }
      public Builder ClearDefaultCord() {
        PrepareBuilder();
        result.hasDefaultCord = false;
        result.defaultCord_ = "123";
        return this;
      }

      public bool HasOneofUint32 {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32; }
      }
      public uint OneofUint32 {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) result.oneofField_ : 0; }
        set { SetOneofUint32(value); }
      }
      public Builder SetOneofUint32(uint value) {
        PrepareBuilder();
        result.oneofField_ = value;
        result.oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
        return this;
      }
      public Builder ClearOneofUint32() {
        PrepareBuilder();
        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
          result.oneofFieldCase_ = OneofFieldOneofCase.None;
        }
        return this;
      }

      public bool HasOneofNestedMessage {
       get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OneofNestedMessage {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage) result.oneofField_ : global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }
        set { SetOneofNestedMessage(value); }
      }
      public Builder SetOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
        result.oneofField_ = value;
        return this;
      }
      public Builder SetOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
        result.oneofField_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage &&
            result.OneofNestedMessage != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) {
          result.oneofField_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder(result.OneofNestedMessage).MergeFrom(value).BuildPartial();
        } else {
          result.oneofField_ = value;
        }
        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
        return this;
      }
      public Builder ClearOneofNestedMessage() {
        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
          PrepareBuilder();
          result.oneofFieldCase_ = OneofFieldOneofCase.None;
          result.oneofField_ = null;
        }
        return this;
      }

      public bool HasOneofString {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofString; }
      }
      public string OneofString {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) result.oneofField_ : ""; }
        set { SetOneofString(value); }
      }
      public Builder SetOneofString(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.oneofField_ = value;
        result.oneofFieldCase_ = OneofFieldOneofCase.OneofString;
        return this;
      }
      public Builder ClearOneofString() {
        PrepareBuilder();
        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
          result.oneofFieldCase_ = OneofFieldOneofCase.None;
        }
        return this;
      }

      public bool HasOneofBytes {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofBytes; }
      }
      public pb::ByteString OneofBytes {
        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofBytes ? (pb::ByteString) result.oneofField_ : pb::ByteString.Empty; }
        set { SetOneofBytes(value); }
      }
      public Builder SetOneofBytes(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.oneofField_ = value;
        result.oneofFieldCase_ = OneofFieldOneofCase.OneofBytes;
        return this;
      }
      public Builder ClearOneofBytes() {
        PrepareBuilder();
        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
          result.oneofFieldCase_ = OneofFieldOneofCase.None;
        }
        return this;
      }

      public OneofFieldOneofCase OneofFieldCase {
        get { return result.oneofFieldCase_; }
      }
      public Builder ClearOneofField() {
        PrepareBuilder();
        result.oneofField_ = null;
        result.oneofFieldCase_ = OneofFieldOneofCase.None;
        return this;
      }
    }
    static TestAllTypesLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class ForeignMessageLite : pb::GeneratedMessageLite<ForeignMessageLite, ForeignMessageLite.Builder> {
    private ForeignMessageLite() { }
    private static readonly ForeignMessageLite defaultInstance = new ForeignMessageLite().MakeReadOnly();
    private static readonly string[] _foreignMessageLiteFieldNames = new string[] { "c" };
    private static readonly uint[] _foreignMessageLiteFieldTags = new uint[] { 8 };
    public static ForeignMessageLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override ForeignMessageLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override ForeignMessageLite ThisMessage {
      get { return this; }
    }

    public const int CFieldNumber = 1;
    private bool hasC;
    private int c_;
    public bool HasC {
      get { return hasC; }
    }
    public int C {
      get { return c_; }
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _foreignMessageLiteFieldNames;
      if (hasC) {
        output.WriteInt32(1, field_names[0], C);
      }
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (hasC) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, C);
      }
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      if (hasC) {
        hash ^= c_.GetHashCode();
      }
      return hash;
    }

    public override bool Equals(object obj) {
      ForeignMessageLite other = obj as ForeignMessageLite;
      if (other == null) return false;
      if (hasC != other.hasC || (hasC && !c_.Equals(other.c_))) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("c", hasC, c_, writer);
    }
    #endregion

    public static ForeignMessageLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static ForeignMessageLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static ForeignMessageLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static ForeignMessageLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private ForeignMessageLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(ForeignMessageLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<ForeignMessageLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(ForeignMessageLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private ForeignMessageLite result;

      private ForeignMessageLite PrepareBuilder() {
        if (resultIsReadOnly) {
          ForeignMessageLite original = result;
          result = new ForeignMessageLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override ForeignMessageLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override ForeignMessageLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance; }
      }

      public override ForeignMessageLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is ForeignMessageLite) {
          return MergeFrom((ForeignMessageLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(ForeignMessageLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.HasC) {
          C = other.C;
        }
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _foreignMessageLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 8: {
              result.hasC = input.ReadInt32(ref result.c_);
              break;
            }
          }
        }

        return this;
      }


      public bool HasC {
        get { return result.hasC; }
      }
      public int C {
        get { return result.C; }
        set { SetC(value); }
      }
      public Builder SetC(int value) {
        PrepareBuilder();
        result.hasC = true;
        result.c_ = value;
        return this;
      }
      public Builder ClearC() {
        PrepareBuilder();
        result.hasC = false;
        result.c_ = 0;
        return this;
      }
    }
    static ForeignMessageLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestPackedTypesLite : pb::GeneratedMessageLite<TestPackedTypesLite, TestPackedTypesLite.Builder> {
    private TestPackedTypesLite() { }
    private static readonly TestPackedTypesLite defaultInstance = new TestPackedTypesLite().MakeReadOnly();
    private static readonly string[] _testPackedTypesLiteFieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };
    private static readonly uint[] _testPackedTypesLiteFieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };
    public static TestPackedTypesLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestPackedTypesLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestPackedTypesLite ThisMessage {
      get { return this; }
    }

    public const int PackedInt32FieldNumber = 90;
    private int packedInt32MemoizedSerializedSize;
    private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();
    public scg::IList<int> PackedInt32List {
      get { return pbc::Lists.AsReadOnly(packedInt32_); }
    }
    public int PackedInt32Count {
      get { return packedInt32_.Count; }
    }
    public int GetPackedInt32(int index) {
      return packedInt32_[index];
    }

    public const int PackedInt64FieldNumber = 91;
    private int packedInt64MemoizedSerializedSize;
    private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();
    public scg::IList<long> PackedInt64List {
      get { return pbc::Lists.AsReadOnly(packedInt64_); }
    }
    public int PackedInt64Count {
      get { return packedInt64_.Count; }
    }
    public long GetPackedInt64(int index) {
      return packedInt64_[index];
    }

    public const int PackedUint32FieldNumber = 92;
    private int packedUint32MemoizedSerializedSize;
    private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();
    public scg::IList<uint> PackedUint32List {
      get { return pbc::Lists.AsReadOnly(packedUint32_); }
    }
    public int PackedUint32Count {
      get { return packedUint32_.Count; }
    }
    public uint GetPackedUint32(int index) {
      return packedUint32_[index];
    }

    public const int PackedUint64FieldNumber = 93;
    private int packedUint64MemoizedSerializedSize;
    private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();
    public scg::IList<ulong> PackedUint64List {
      get { return pbc::Lists.AsReadOnly(packedUint64_); }
    }
    public int PackedUint64Count {
      get { return packedUint64_.Count; }
    }
    public ulong GetPackedUint64(int index) {
      return packedUint64_[index];
    }

    public const int PackedSint32FieldNumber = 94;
    private int packedSint32MemoizedSerializedSize;
    private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();
    public scg::IList<int> PackedSint32List {
      get { return pbc::Lists.AsReadOnly(packedSint32_); }
    }
    public int PackedSint32Count {
      get { return packedSint32_.Count; }
    }
    public int GetPackedSint32(int index) {
      return packedSint32_[index];
    }

    public const int PackedSint64FieldNumber = 95;
    private int packedSint64MemoizedSerializedSize;
    private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();
    public scg::IList<long> PackedSint64List {
      get { return pbc::Lists.AsReadOnly(packedSint64_); }
    }
    public int PackedSint64Count {
      get { return packedSint64_.Count; }
    }
    public long GetPackedSint64(int index) {
      return packedSint64_[index];
    }

    public const int PackedFixed32FieldNumber = 96;
    private int packedFixed32MemoizedSerializedSize;
    private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();
    public scg::IList<uint> PackedFixed32List {
      get { return pbc::Lists.AsReadOnly(packedFixed32_); }
    }
    public int PackedFixed32Count {
      get { return packedFixed32_.Count; }
    }
    public uint GetPackedFixed32(int index) {
      return packedFixed32_[index];
    }

    public const int PackedFixed64FieldNumber = 97;
    private int packedFixed64MemoizedSerializedSize;
    private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();
    public scg::IList<ulong> PackedFixed64List {
      get { return pbc::Lists.AsReadOnly(packedFixed64_); }
    }
    public int PackedFixed64Count {
      get { return packedFixed64_.Count; }
    }
    public ulong GetPackedFixed64(int index) {
      return packedFixed64_[index];
    }

    public const int PackedSfixed32FieldNumber = 98;
    private int packedSfixed32MemoizedSerializedSize;
    private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();
    public scg::IList<int> PackedSfixed32List {
      get { return pbc::Lists.AsReadOnly(packedSfixed32_); }
    }
    public int PackedSfixed32Count {
      get { return packedSfixed32_.Count; }
    }
    public int GetPackedSfixed32(int index) {
      return packedSfixed32_[index];
    }

    public const int PackedSfixed64FieldNumber = 99;
    private int packedSfixed64MemoizedSerializedSize;
    private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();
    public scg::IList<long> PackedSfixed64List {
      get { return pbc::Lists.AsReadOnly(packedSfixed64_); }
    }
    public int PackedSfixed64Count {
      get { return packedSfixed64_.Count; }
    }
    public long GetPackedSfixed64(int index) {
      return packedSfixed64_[index];
    }

    public const int PackedFloatFieldNumber = 100;
    private int packedFloatMemoizedSerializedSize;
    private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();
    public scg::IList<float> PackedFloatList {
      get { return pbc::Lists.AsReadOnly(packedFloat_); }
    }
    public int PackedFloatCount {
      get { return packedFloat_.Count; }
    }
    public float GetPackedFloat(int index) {
      return packedFloat_[index];
    }

    public const int PackedDoubleFieldNumber = 101;
    private int packedDoubleMemoizedSerializedSize;
    private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();
    public scg::IList<double> PackedDoubleList {
      get { return pbc::Lists.AsReadOnly(packedDouble_); }
    }
    public int PackedDoubleCount {
      get { return packedDouble_.Count; }
    }
    public double GetPackedDouble(int index) {
      return packedDouble_[index];
    }

    public const int PackedBoolFieldNumber = 102;
    private int packedBoolMemoizedSerializedSize;
    private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();
    public scg::IList<bool> PackedBoolList {
      get { return pbc::Lists.AsReadOnly(packedBool_); }
    }
    public int PackedBoolCount {
      get { return packedBool_.Count; }
    }
    public bool GetPackedBool(int index) {
      return packedBool_[index];
    }

    public const int PackedEnumFieldNumber = 103;
    private int packedEnumMemoizedSerializedSize;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumList {
      get { return pbc::Lists.AsReadOnly(packedEnum_); }
    }
    public int PackedEnumCount {
      get { return packedEnum_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetPackedEnum(int index) {
      return packedEnum_[index];
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testPackedTypesLiteFieldNames;
      if (packedInt32_.Count > 0) {
        output.WritePackedInt32Array(90, field_names[6], packedInt32MemoizedSerializedSize, packedInt32_);
      }
      if (packedInt64_.Count > 0) {
        output.WritePackedInt64Array(91, field_names[7], packedInt64MemoizedSerializedSize, packedInt64_);
      }
      if (packedUint32_.Count > 0) {
        output.WritePackedUInt32Array(92, field_names[12], packedUint32MemoizedSerializedSize, packedUint32_);
      }
      if (packedUint64_.Count > 0) {
        output.WritePackedUInt64Array(93, field_names[13], packedUint64MemoizedSerializedSize, packedUint64_);
      }
      if (packedSint32_.Count > 0) {
        output.WritePackedSInt32Array(94, field_names[10], packedSint32MemoizedSerializedSize, packedSint32_);
      }
      if (packedSint64_.Count > 0) {
        output.WritePackedSInt64Array(95, field_names[11], packedSint64MemoizedSerializedSize, packedSint64_);
      }
      if (packedFixed32_.Count > 0) {
        output.WritePackedFixed32Array(96, field_names[3], packedFixed32MemoizedSerializedSize, packedFixed32_);
      }
      if (packedFixed64_.Count > 0) {
        output.WritePackedFixed64Array(97, field_names[4], packedFixed64MemoizedSerializedSize, packedFixed64_);
      }
      if (packedSfixed32_.Count > 0) {
        output.WritePackedSFixed32Array(98, field_names[8], packedSfixed32MemoizedSerializedSize, packedSfixed32_);
      }
      if (packedSfixed64_.Count > 0) {
        output.WritePackedSFixed64Array(99, field_names[9], packedSfixed64MemoizedSerializedSize, packedSfixed64_);
      }
      if (packedFloat_.Count > 0) {
        output.WritePackedFloatArray(100, field_names[5], packedFloatMemoizedSerializedSize, packedFloat_);
      }
      if (packedDouble_.Count > 0) {
        output.WritePackedDoubleArray(101, field_names[1], packedDoubleMemoizedSerializedSize, packedDouble_);
      }
      if (packedBool_.Count > 0) {
        output.WritePackedBoolArray(102, field_names[0], packedBoolMemoizedSerializedSize, packedBool_);
      }
      if (packedEnum_.Count > 0) {
        output.WritePackedEnumArray(103, field_names[2], packedEnumMemoizedSerializedSize, packedEnum_);
      }
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        foreach (int element in PackedInt32List) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (packedInt32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedInt32MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        foreach (long element in PackedInt64List) {
          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
        }
        size += dataSize;
        if (packedInt64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedInt64MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        foreach (uint element in PackedUint32List) {
          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (packedUint32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedUint32MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        foreach (ulong element in PackedUint64List) {
          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
        }
        size += dataSize;
        if (packedUint64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedUint64MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        foreach (int element in PackedSint32List) {
          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
        }
        size += dataSize;
        if (packedSint32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedSint32MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        foreach (long element in PackedSint64List) {
          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (packedSint64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedSint64MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 4 * packedFixed32_.Count;
        size += dataSize;
        if (packedFixed32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedFixed32MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * packedFixed64_.Count;
        size += dataSize;
        if (packedFixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedFixed64MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 4 * packedSfixed32_.Count;
        size += dataSize;
        if (packedSfixed32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedSfixed32MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * packedSfixed64_.Count;
        size += dataSize;
        if (packedSfixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedSfixed64MemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 4 * packedFloat_.Count;
        size += dataSize;
        if (packedFloat_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedFloatMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * packedDouble_.Count;
        size += dataSize;
        if (packedDouble_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedDoubleMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 1 * packedBool_.Count;
        size += dataSize;
        if (packedBool_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
        packedBoolMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        if (packedEnum_.Count > 0) {
          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite element in packedEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2;
          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
        }
        packedEnumMemoizedSerializedSize = dataSize;
      }
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      foreach(int i in packedInt32_)
        hash ^= i.GetHashCode();
      foreach(long i in packedInt64_)
        hash ^= i.GetHashCode();
      foreach(uint i in packedUint32_)
        hash ^= i.GetHashCode();
      foreach(ulong i in packedUint64_)
        hash ^= i.GetHashCode();
      foreach(int i in packedSint32_)
        hash ^= i.GetHashCode();
      foreach(long i in packedSint64_)
        hash ^= i.GetHashCode();
      foreach(uint i in packedFixed32_)
        hash ^= i.GetHashCode();
      foreach(ulong i in packedFixed64_)
        hash ^= i.GetHashCode();
      foreach(int i in packedSfixed32_)
        hash ^= i.GetHashCode();
      foreach(long i in packedSfixed64_)
        hash ^= i.GetHashCode();
      foreach(float i in packedFloat_)
        hash ^= i.GetHashCode();
      foreach(double i in packedDouble_)
        hash ^= i.GetHashCode();
      foreach(bool i in packedBool_)
        hash ^= i.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite i in packedEnum_)
        hash ^= i.GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestPackedTypesLite other = obj as TestPackedTypesLite;
      if (other == null) return false;
      if(packedInt32_.Count != other.packedInt32_.Count) return false;
      for(int ix=0; ix < packedInt32_.Count; ix++)
        if(!packedInt32_[ix].Equals(other.packedInt32_[ix])) return false;
      if(packedInt64_.Count != other.packedInt64_.Count) return false;
      for(int ix=0; ix < packedInt64_.Count; ix++)
        if(!packedInt64_[ix].Equals(other.packedInt64_[ix])) return false;
      if(packedUint32_.Count != other.packedUint32_.Count) return false;
      for(int ix=0; ix < packedUint32_.Count; ix++)
        if(!packedUint32_[ix].Equals(other.packedUint32_[ix])) return false;
      if(packedUint64_.Count != other.packedUint64_.Count) return false;
      for(int ix=0; ix < packedUint64_.Count; ix++)
        if(!packedUint64_[ix].Equals(other.packedUint64_[ix])) return false;
      if(packedSint32_.Count != other.packedSint32_.Count) return false;
      for(int ix=0; ix < packedSint32_.Count; ix++)
        if(!packedSint32_[ix].Equals(other.packedSint32_[ix])) return false;
      if(packedSint64_.Count != other.packedSint64_.Count) return false;
      for(int ix=0; ix < packedSint64_.Count; ix++)
        if(!packedSint64_[ix].Equals(other.packedSint64_[ix])) return false;
      if(packedFixed32_.Count != other.packedFixed32_.Count) return false;
      for(int ix=0; ix < packedFixed32_.Count; ix++)
        if(!packedFixed32_[ix].Equals(other.packedFixed32_[ix])) return false;
      if(packedFixed64_.Count != other.packedFixed64_.Count) return false;
      for(int ix=0; ix < packedFixed64_.Count; ix++)
        if(!packedFixed64_[ix].Equals(other.packedFixed64_[ix])) return false;
      if(packedSfixed32_.Count != other.packedSfixed32_.Count) return false;
      for(int ix=0; ix < packedSfixed32_.Count; ix++)
        if(!packedSfixed32_[ix].Equals(other.packedSfixed32_[ix])) return false;
      if(packedSfixed64_.Count != other.packedSfixed64_.Count) return false;
      for(int ix=0; ix < packedSfixed64_.Count; ix++)
        if(!packedSfixed64_[ix].Equals(other.packedSfixed64_[ix])) return false;
      if(packedFloat_.Count != other.packedFloat_.Count) return false;
      for(int ix=0; ix < packedFloat_.Count; ix++)
        if(!packedFloat_[ix].Equals(other.packedFloat_[ix])) return false;
      if(packedDouble_.Count != other.packedDouble_.Count) return false;
      for(int ix=0; ix < packedDouble_.Count; ix++)
        if(!packedDouble_[ix].Equals(other.packedDouble_[ix])) return false;
      if(packedBool_.Count != other.packedBool_.Count) return false;
      for(int ix=0; ix < packedBool_.Count; ix++)
        if(!packedBool_[ix].Equals(other.packedBool_[ix])) return false;
      if(packedEnum_.Count != other.packedEnum_.Count) return false;
      for(int ix=0; ix < packedEnum_.Count; ix++)
        if(!packedEnum_[ix].Equals(other.packedEnum_[ix])) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("packed_int32", packedInt32_, writer);
      PrintField("packed_int64", packedInt64_, writer);
      PrintField("packed_uint32", packedUint32_, writer);
      PrintField("packed_uint64", packedUint64_, writer);
      PrintField("packed_sint32", packedSint32_, writer);
      PrintField("packed_sint64", packedSint64_, writer);
      PrintField("packed_fixed32", packedFixed32_, writer);
      PrintField("packed_fixed64", packedFixed64_, writer);
      PrintField("packed_sfixed32", packedSfixed32_, writer);
      PrintField("packed_sfixed64", packedSfixed64_, writer);
      PrintField("packed_float", packedFloat_, writer);
      PrintField("packed_double", packedDouble_, writer);
      PrintField("packed_bool", packedBool_, writer);
      PrintField("packed_enum", packedEnum_, writer);
    }
    #endregion

    public static TestPackedTypesLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestPackedTypesLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestPackedTypesLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestPackedTypesLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestPackedTypesLite MakeReadOnly() {
      packedInt32_.MakeReadOnly();
      packedInt64_.MakeReadOnly();
      packedUint32_.MakeReadOnly();
      packedUint64_.MakeReadOnly();
      packedSint32_.MakeReadOnly();
      packedSint64_.MakeReadOnly();
      packedFixed32_.MakeReadOnly();
      packedFixed64_.MakeReadOnly();
      packedSfixed32_.MakeReadOnly();
      packedSfixed64_.MakeReadOnly();
      packedFloat_.MakeReadOnly();
      packedDouble_.MakeReadOnly();
      packedBool_.MakeReadOnly();
      packedEnum_.MakeReadOnly();
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestPackedTypesLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<TestPackedTypesLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestPackedTypesLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestPackedTypesLite result;

      private TestPackedTypesLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestPackedTypesLite original = result;
          result = new TestPackedTypesLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestPackedTypesLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestPackedTypesLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.DefaultInstance; }
      }

      public override TestPackedTypesLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestPackedTypesLite) {
          return MergeFrom((TestPackedTypesLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestPackedTypesLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.packedInt32_.Count != 0) {
          result.packedInt32_.Add(other.packedInt32_);
        }
        if (other.packedInt64_.Count != 0) {
          result.packedInt64_.Add(other.packedInt64_);
        }
        if (other.packedUint32_.Count != 0) {
          result.packedUint32_.Add(other.packedUint32_);
        }
        if (other.packedUint64_.Count != 0) {
          result.packedUint64_.Add(other.packedUint64_);
        }
        if (other.packedSint32_.Count != 0) {
          result.packedSint32_.Add(other.packedSint32_);
        }
        if (other.packedSint64_.Count != 0) {
          result.packedSint64_.Add(other.packedSint64_);
        }
        if (other.packedFixed32_.Count != 0) {
          result.packedFixed32_.Add(other.packedFixed32_);
        }
        if (other.packedFixed64_.Count != 0) {
          result.packedFixed64_.Add(other.packedFixed64_);
        }
        if (other.packedSfixed32_.Count != 0) {
          result.packedSfixed32_.Add(other.packedSfixed32_);
        }
        if (other.packedSfixed64_.Count != 0) {
          result.packedSfixed64_.Add(other.packedSfixed64_);
        }
        if (other.packedFloat_.Count != 0) {
          result.packedFloat_.Add(other.packedFloat_);
        }
        if (other.packedDouble_.Count != 0) {
          result.packedDouble_.Add(other.packedDouble_);
        }
        if (other.packedBool_.Count != 0) {
          result.packedBool_.Add(other.packedBool_);
        }
        if (other.packedEnum_.Count != 0) {
          result.packedEnum_.Add(other.packedEnum_);
        }
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testPackedTypesLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testPackedTypesLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 722:
            case 720: {
              input.ReadInt32Array(tag, field_name, result.packedInt32_);
              break;
            }
            case 730:
            case 728: {
              input.ReadInt64Array(tag, field_name, result.packedInt64_);
              break;
            }
            case 738:
            case 736: {
              input.ReadUInt32Array(tag, field_name, result.packedUint32_);
              break;
            }
            case 746:
            case 744: {
              input.ReadUInt64Array(tag, field_name, result.packedUint64_);
              break;
            }
            case 754:
            case 752: {
              input.ReadSInt32Array(tag, field_name, result.packedSint32_);
              break;
            }
            case 762:
            case 760: {
              input.ReadSInt64Array(tag, field_name, result.packedSint64_);
              break;
            }
            case 770:
            case 773: {
              input.ReadFixed32Array(tag, field_name, result.packedFixed32_);
              break;
            }
            case 778:
            case 777: {
              input.ReadFixed64Array(tag, field_name, result.packedFixed64_);
              break;
            }
            case 786:
            case 789: {
              input.ReadSFixed32Array(tag, field_name, result.packedSfixed32_);
              break;
            }
            case 794:
            case 793: {
              input.ReadSFixed64Array(tag, field_name, result.packedSfixed64_);
              break;
            }
            case 802:
            case 805: {
              input.ReadFloatArray(tag, field_name, result.packedFloat_);
              break;
            }
            case 810:
            case 809: {
              input.ReadDoubleArray(tag, field_name, result.packedDouble_);
              break;
            }
            case 818:
            case 816: {
              input.ReadBoolArray(tag, field_name, result.packedBool_);
              break;
            }
            case 826:
            case 824: {
              scg::ICollection<object> unknownItems;
              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(tag, field_name, result.packedEnum_, out unknownItems);
              break;
            }
          }
        }

        return this;
      }


      public pbc::IPopsicleList<int> PackedInt32List {
        get { return PrepareBuilder().packedInt32_; }
      }
      public int PackedInt32Count {
        get { return result.PackedInt32Count; }
      }
      public int GetPackedInt32(int index) {
        return result.GetPackedInt32(index);
      }
      public Builder SetPackedInt32(int index, int value) {
        PrepareBuilder();
        result.packedInt32_[index] = value;
        return this;
      }
      public Builder AddPackedInt32(int value) {
        PrepareBuilder();
        result.packedInt32_.Add(value);
        return this;
      }
      public Builder AddRangePackedInt32(scg::IEnumerable<int> values) {
        PrepareBuilder();
        result.packedInt32_.Add(values);
        return this;
      }
      public Builder ClearPackedInt32() {
        PrepareBuilder();
        result.packedInt32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<long> PackedInt64List {
        get { return PrepareBuilder().packedInt64_; }
      }
      public int PackedInt64Count {
        get { return result.PackedInt64Count; }
      }
      public long GetPackedInt64(int index) {
        return result.GetPackedInt64(index);
      }
      public Builder SetPackedInt64(int index, long value) {
        PrepareBuilder();
        result.packedInt64_[index] = value;
        return this;
      }
      public Builder AddPackedInt64(long value) {
        PrepareBuilder();
        result.packedInt64_.Add(value);
        return this;
      }
      public Builder AddRangePackedInt64(scg::IEnumerable<long> values) {
        PrepareBuilder();
        result.packedInt64_.Add(values);
        return this;
      }
      public Builder ClearPackedInt64() {
        PrepareBuilder();
        result.packedInt64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<uint> PackedUint32List {
        get { return PrepareBuilder().packedUint32_; }
      }
      public int PackedUint32Count {
        get { return result.PackedUint32Count; }
      }
      public uint GetPackedUint32(int index) {
        return result.GetPackedUint32(index);
      }
      public Builder SetPackedUint32(int index, uint value) {
        PrepareBuilder();
        result.packedUint32_[index] = value;
        return this;
      }
      public Builder AddPackedUint32(uint value) {
        PrepareBuilder();
        result.packedUint32_.Add(value);
        return this;
      }
      public Builder AddRangePackedUint32(scg::IEnumerable<uint> values) {
        PrepareBuilder();
        result.packedUint32_.Add(values);
        return this;
      }
      public Builder ClearPackedUint32() {
        PrepareBuilder();
        result.packedUint32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<ulong> PackedUint64List {
        get { return PrepareBuilder().packedUint64_; }
      }
      public int PackedUint64Count {
        get { return result.PackedUint64Count; }
      }
      public ulong GetPackedUint64(int index) {
        return result.GetPackedUint64(index);
      }
      public Builder SetPackedUint64(int index, ulong value) {
        PrepareBuilder();
        result.packedUint64_[index] = value;
        return this;
      }
      public Builder AddPackedUint64(ulong value) {
        PrepareBuilder();
        result.packedUint64_.Add(value);
        return this;
      }
      public Builder AddRangePackedUint64(scg::IEnumerable<ulong> values) {
        PrepareBuilder();
        result.packedUint64_.Add(values);
        return this;
      }
      public Builder ClearPackedUint64() {
        PrepareBuilder();
        result.packedUint64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<int> PackedSint32List {
        get { return PrepareBuilder().packedSint32_; }
      }
      public int PackedSint32Count {
        get { return result.PackedSint32Count; }
      }
      public int GetPackedSint32(int index) {
        return result.GetPackedSint32(index);
      }
      public Builder SetPackedSint32(int index, int value) {
        PrepareBuilder();
        result.packedSint32_[index] = value;
        return this;
      }
      public Builder AddPackedSint32(int value) {
        PrepareBuilder();
        result.packedSint32_.Add(value);
        return this;
      }
      public Builder AddRangePackedSint32(scg::IEnumerable<int> values) {
        PrepareBuilder();
        result.packedSint32_.Add(values);
        return this;
      }
      public Builder ClearPackedSint32() {
        PrepareBuilder();
        result.packedSint32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<long> PackedSint64List {
        get { return PrepareBuilder().packedSint64_; }
      }
      public int PackedSint64Count {
        get { return result.PackedSint64Count; }
      }
      public long GetPackedSint64(int index) {
        return result.GetPackedSint64(index);
      }
      public Builder SetPackedSint64(int index, long value) {
        PrepareBuilder();
        result.packedSint64_[index] = value;
        return this;
      }
      public Builder AddPackedSint64(long value) {
        PrepareBuilder();
        result.packedSint64_.Add(value);
        return this;
      }
      public Builder AddRangePackedSint64(scg::IEnumerable<long> values) {
        PrepareBuilder();
        result.packedSint64_.Add(values);
        return this;
      }
      public Builder ClearPackedSint64() {
        PrepareBuilder();
        result.packedSint64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<uint> PackedFixed32List {
        get { return PrepareBuilder().packedFixed32_; }
      }
      public int PackedFixed32Count {
        get { return result.PackedFixed32Count; }
      }
      public uint GetPackedFixed32(int index) {
        return result.GetPackedFixed32(index);
      }
      public Builder SetPackedFixed32(int index, uint value) {
        PrepareBuilder();
        result.packedFixed32_[index] = value;
        return this;
      }
      public Builder AddPackedFixed32(uint value) {
        PrepareBuilder();
        result.packedFixed32_.Add(value);
        return this;
      }
      public Builder AddRangePackedFixed32(scg::IEnumerable<uint> values) {
        PrepareBuilder();
        result.packedFixed32_.Add(values);
        return this;
      }
      public Builder ClearPackedFixed32() {
        PrepareBuilder();
        result.packedFixed32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<ulong> PackedFixed64List {
        get { return PrepareBuilder().packedFixed64_; }
      }
      public int PackedFixed64Count {
        get { return result.PackedFixed64Count; }
      }
      public ulong GetPackedFixed64(int index) {
        return result.GetPackedFixed64(index);
      }
      public Builder SetPackedFixed64(int index, ulong value) {
        PrepareBuilder();
        result.packedFixed64_[index] = value;
        return this;
      }
      public Builder AddPackedFixed64(ulong value) {
        PrepareBuilder();
        result.packedFixed64_.Add(value);
        return this;
      }
      public Builder AddRangePackedFixed64(scg::IEnumerable<ulong> values) {
        PrepareBuilder();
        result.packedFixed64_.Add(values);
        return this;
      }
      public Builder ClearPackedFixed64() {
        PrepareBuilder();
        result.packedFixed64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<int> PackedSfixed32List {
        get { return PrepareBuilder().packedSfixed32_; }
      }
      public int PackedSfixed32Count {
        get { return result.PackedSfixed32Count; }
      }
      public int GetPackedSfixed32(int index) {
        return result.GetPackedSfixed32(index);
      }
      public Builder SetPackedSfixed32(int index, int value) {
        PrepareBuilder();
        result.packedSfixed32_[index] = value;
        return this;
      }
      public Builder AddPackedSfixed32(int value) {
        PrepareBuilder();
        result.packedSfixed32_.Add(value);
        return this;
      }
      public Builder AddRangePackedSfixed32(scg::IEnumerable<int> values) {
        PrepareBuilder();
        result.packedSfixed32_.Add(values);
        return this;
      }
      public Builder ClearPackedSfixed32() {
        PrepareBuilder();
        result.packedSfixed32_.Clear();
        return this;
      }

      public pbc::IPopsicleList<long> PackedSfixed64List {
        get { return PrepareBuilder().packedSfixed64_; }
      }
      public int PackedSfixed64Count {
        get { return result.PackedSfixed64Count; }
      }
      public long GetPackedSfixed64(int index) {
        return result.GetPackedSfixed64(index);
      }
      public Builder SetPackedSfixed64(int index, long value) {
        PrepareBuilder();
        result.packedSfixed64_[index] = value;
        return this;
      }
      public Builder AddPackedSfixed64(long value) {
        PrepareBuilder();
        result.packedSfixed64_.Add(value);
        return this;
      }
      public Builder AddRangePackedSfixed64(scg::IEnumerable<long> values) {
        PrepareBuilder();
        result.packedSfixed64_.Add(values);
        return this;
      }
      public Builder ClearPackedSfixed64() {
        PrepareBuilder();
        result.packedSfixed64_.Clear();
        return this;
      }

      public pbc::IPopsicleList<float> PackedFloatList {
        get { return PrepareBuilder().packedFloat_; }
      }
      public int PackedFloatCount {
        get { return result.PackedFloatCount; }
      }
      public float GetPackedFloat(int index) {
        return result.GetPackedFloat(index);
      }
      public Builder SetPackedFloat(int index, float value) {
        PrepareBuilder();
        result.packedFloat_[index] = value;
        return this;
      }
      public Builder AddPackedFloat(float value) {
        PrepareBuilder();
        result.packedFloat_.Add(value);
        return this;
      }
      public Builder AddRangePackedFloat(scg::IEnumerable<float> values) {
        PrepareBuilder();
        result.packedFloat_.Add(values);
        return this;
      }
      public Builder ClearPackedFloat() {
        PrepareBuilder();
        result.packedFloat_.Clear();
        return this;
      }

      public pbc::IPopsicleList<double> PackedDoubleList {
        get { return PrepareBuilder().packedDouble_; }
      }
      public int PackedDoubleCount {
        get { return result.PackedDoubleCount; }
      }
      public double GetPackedDouble(int index) {
        return result.GetPackedDouble(index);
      }
      public Builder SetPackedDouble(int index, double value) {
        PrepareBuilder();
        result.packedDouble_[index] = value;
        return this;
      }
      public Builder AddPackedDouble(double value) {
        PrepareBuilder();
        result.packedDouble_.Add(value);
        return this;
      }
      public Builder AddRangePackedDouble(scg::IEnumerable<double> values) {
        PrepareBuilder();
        result.packedDouble_.Add(values);
        return this;
      }
      public Builder ClearPackedDouble() {
        PrepareBuilder();
        result.packedDouble_.Clear();
        return this;
      }

      public pbc::IPopsicleList<bool> PackedBoolList {
        get { return PrepareBuilder().packedBool_; }
      }
      public int PackedBoolCount {
        get { return result.PackedBoolCount; }
      }
      public bool GetPackedBool(int index) {
        return result.GetPackedBool(index);
      }
      public Builder SetPackedBool(int index, bool value) {
        PrepareBuilder();
        result.packedBool_[index] = value;
        return this;
      }
      public Builder AddPackedBool(bool value) {
        PrepareBuilder();
        result.packedBool_.Add(value);
        return this;
      }
      public Builder AddRangePackedBool(scg::IEnumerable<bool> values) {
        PrepareBuilder();
        result.packedBool_.Add(values);
        return this;
      }
      public Builder ClearPackedBool() {
        PrepareBuilder();
        result.packedBool_.Clear();
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumList {
        get { return PrepareBuilder().packedEnum_; }
      }
      public int PackedEnumCount {
        get { return result.PackedEnumCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetPackedEnum(int index) {
        return result.GetPackedEnum(index);
      }
      public Builder SetPackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {
        PrepareBuilder();
        result.packedEnum_[index] = value;
        return this;
      }
      public Builder AddPackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {
        PrepareBuilder();
        result.packedEnum_.Add(value);
        return this;
      }
      public Builder AddRangePackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> values) {
        PrepareBuilder();
        result.packedEnum_.Add(values);
        return this;
      }
      public Builder ClearPackedEnum() {
        PrepareBuilder();
        result.packedEnum_.Clear();
        return this;
      }
    }
    static TestPackedTypesLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestAllExtensionsLite : pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder> {
    private TestAllExtensionsLite() { }
    private static readonly TestAllExtensionsLite defaultInstance = new TestAllExtensionsLite().MakeReadOnly();
    private static readonly string[] _testAllExtensionsLiteFieldNames = new string[] {  };
    private static readonly uint[] _testAllExtensionsLiteFieldTags = new uint[] {  };
    public static TestAllExtensionsLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestAllExtensionsLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestAllExtensionsLite ThisMessage {
      get { return this; }
    }

    public override bool IsInitialized {
      get {
        if (!ExtensionsAreInitialized) return false;
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testAllExtensionsLiteFieldNames;
      pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
      extensionWriter.WriteUntil(536870912, output);
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += ExtensionsSerializedSize;
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      hash ^= base.GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestAllExtensionsLite other = obj as TestAllExtensionsLite;
      if (other == null) return false;
      if (!base.Equals(other)) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      base.PrintTo(writer);
    }
    #endregion

    public static TestAllExtensionsLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestAllExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestAllExtensionsLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestAllExtensionsLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestAllExtensionsLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::ExtendableBuilderLite<TestAllExtensionsLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestAllExtensionsLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestAllExtensionsLite result;

      private TestAllExtensionsLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestAllExtensionsLite original = result;
          result = new TestAllExtensionsLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestAllExtensionsLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestAllExtensionsLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance; }
      }

      public override TestAllExtensionsLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestAllExtensionsLite) {
          return MergeFrom((TestAllExtensionsLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestAllExtensionsLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance) return this;
        PrepareBuilder();
          this.MergeExtensionFields(other);
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testAllExtensionsLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testAllExtensionsLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
          }
        }

        return this;
      }

    }
    static TestAllExtensionsLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class OptionalGroup_extension_lite : pb::GeneratedMessageLite<OptionalGroup_extension_lite, OptionalGroup_extension_lite.Builder> {
    private OptionalGroup_extension_lite() { }
    private static readonly OptionalGroup_extension_lite defaultInstance = new OptionalGroup_extension_lite().MakeReadOnly();
    private static readonly string[] _optionalGroupExtensionLiteFieldNames = new string[] { "a" };
    private static readonly uint[] _optionalGroupExtensionLiteFieldTags = new uint[] { 136 };
    public static OptionalGroup_extension_lite DefaultInstance {
      get { return defaultInstance; }
    }

    public override OptionalGroup_extension_lite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override OptionalGroup_extension_lite ThisMessage {
      get { return this; }
    }

    public const int AFieldNumber = 17;
    private bool hasA;
    private int a_;
    public bool HasA {
      get { return hasA; }
    }
    public int A {
      get { return a_; }
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _optionalGroupExtensionLiteFieldNames;
      if (hasA) {
        output.WriteInt32(17, field_names[0], A);
      }
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (hasA) {
        size += pb::CodedOutputStream.ComputeInt32Size(17, A);
      }
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      if (hasA) {
        hash ^= a_.GetHashCode();
      }
      return hash;
    }

    public override bool Equals(object obj) {
      OptionalGroup_extension_lite other = obj as OptionalGroup_extension_lite;
      if (other == null) return false;
      if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("a", hasA, a_, writer);
    }
    #endregion

    public static OptionalGroup_extension_lite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static OptionalGroup_extension_lite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private OptionalGroup_extension_lite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(OptionalGroup_extension_lite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup_extension_lite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(OptionalGroup_extension_lite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private OptionalGroup_extension_lite result;

      private OptionalGroup_extension_lite PrepareBuilder() {
        if (resultIsReadOnly) {
          OptionalGroup_extension_lite original = result;
          result = new OptionalGroup_extension_lite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override OptionalGroup_extension_lite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override OptionalGroup_extension_lite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance; }
      }

      public override OptionalGroup_extension_lite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is OptionalGroup_extension_lite) {
          return MergeFrom((OptionalGroup_extension_lite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(OptionalGroup_extension_lite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.HasA) {
          A = other.A;
        }
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_optionalGroupExtensionLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _optionalGroupExtensionLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 136: {
              result.hasA = input.ReadInt32(ref result.a_);
              break;
            }
          }
        }

        return this;
      }


      public bool HasA {
        get { return result.hasA; }
      }
      public int A {
        get { return result.A; }
        set { SetA(value); }
      }
      public Builder SetA(int value) {
        PrepareBuilder();
        result.hasA = true;
        result.a_ = value;
        return this;
      }
      public Builder ClearA() {
        PrepareBuilder();
        result.hasA = false;
        result.a_ = 0;
        return this;
      }
    }
    static OptionalGroup_extension_lite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class RepeatedGroup_extension_lite : pb::GeneratedMessageLite<RepeatedGroup_extension_lite, RepeatedGroup_extension_lite.Builder> {
    private RepeatedGroup_extension_lite() { }
    private static readonly RepeatedGroup_extension_lite defaultInstance = new RepeatedGroup_extension_lite().MakeReadOnly();
    private static readonly string[] _repeatedGroupExtensionLiteFieldNames = new string[] { "a" };
    private static readonly uint[] _repeatedGroupExtensionLiteFieldTags = new uint[] { 376 };
    public static RepeatedGroup_extension_lite DefaultInstance {
      get { return defaultInstance; }
    }

    public override RepeatedGroup_extension_lite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override RepeatedGroup_extension_lite ThisMessage {
      get { return this; }
    }

    public const int AFieldNumber = 47;
    private bool hasA;
    private int a_;
    public bool HasA {
      get { return hasA; }
    }
    public int A {
      get { return a_; }
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _repeatedGroupExtensionLiteFieldNames;
      if (hasA) {
        output.WriteInt32(47, field_names[0], A);
      }
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (hasA) {
        size += pb::CodedOutputStream.ComputeInt32Size(47, A);
      }
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      if (hasA) {
        hash ^= a_.GetHashCode();
      }
      return hash;
    }

    public override bool Equals(object obj) {
      RepeatedGroup_extension_lite other = obj as RepeatedGroup_extension_lite;
      if (other == null) return false;
      if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("a", hasA, a_, writer);
    }
    #endregion

    public static RepeatedGroup_extension_lite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static RepeatedGroup_extension_lite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private RepeatedGroup_extension_lite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(RepeatedGroup_extension_lite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup_extension_lite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(RepeatedGroup_extension_lite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private RepeatedGroup_extension_lite result;

      private RepeatedGroup_extension_lite PrepareBuilder() {
        if (resultIsReadOnly) {
          RepeatedGroup_extension_lite original = result;
          result = new RepeatedGroup_extension_lite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override RepeatedGroup_extension_lite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override RepeatedGroup_extension_lite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance; }
      }

      public override RepeatedGroup_extension_lite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is RepeatedGroup_extension_lite) {
          return MergeFrom((RepeatedGroup_extension_lite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(RepeatedGroup_extension_lite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.HasA) {
          A = other.A;
        }
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupExtensionLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _repeatedGroupExtensionLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 376: {
              result.hasA = input.ReadInt32(ref result.a_);
              break;
            }
          }
        }

        return this;
      }


      public bool HasA {
        get { return result.hasA; }
      }
      public int A {
        get { return result.A; }
        set { SetA(value); }
      }
      public Builder SetA(int value) {
        PrepareBuilder();
        result.hasA = true;
        result.a_ = value;
        return this;
      }
      public Builder ClearA() {
        PrepareBuilder();
        result.hasA = false;
        result.a_ = 0;
        return this;
      }
    }
    static RepeatedGroup_extension_lite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestPackedExtensionsLite : pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder> {
    private TestPackedExtensionsLite() { }
    private static readonly TestPackedExtensionsLite defaultInstance = new TestPackedExtensionsLite().MakeReadOnly();
    private static readonly string[] _testPackedExtensionsLiteFieldNames = new string[] {  };
    private static readonly uint[] _testPackedExtensionsLiteFieldTags = new uint[] {  };
    public static TestPackedExtensionsLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestPackedExtensionsLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestPackedExtensionsLite ThisMessage {
      get { return this; }
    }

    public override bool IsInitialized {
      get {
        if (!ExtensionsAreInitialized) return false;
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testPackedExtensionsLiteFieldNames;
      pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
      extensionWriter.WriteUntil(536870912, output);
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += ExtensionsSerializedSize;
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      hash ^= base.GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestPackedExtensionsLite other = obj as TestPackedExtensionsLite;
      if (other == null) return false;
      if (!base.Equals(other)) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      base.PrintTo(writer);
    }
    #endregion

    public static TestPackedExtensionsLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestPackedExtensionsLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestPackedExtensionsLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestPackedExtensionsLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::ExtendableBuilderLite<TestPackedExtensionsLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestPackedExtensionsLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestPackedExtensionsLite result;

      private TestPackedExtensionsLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestPackedExtensionsLite original = result;
          result = new TestPackedExtensionsLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestPackedExtensionsLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestPackedExtensionsLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance; }
      }

      public override TestPackedExtensionsLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestPackedExtensionsLite) {
          return MergeFrom((TestPackedExtensionsLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestPackedExtensionsLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance) return this;
        PrepareBuilder();
          this.MergeExtensionFields(other);
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testPackedExtensionsLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testPackedExtensionsLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
          }
        }

        return this;
      }

    }
    static TestPackedExtensionsLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestNestedExtensionLite : pb::GeneratedMessageLite<TestNestedExtensionLite, TestNestedExtensionLite.Builder> {
    private TestNestedExtensionLite() { }
    private static readonly TestNestedExtensionLite defaultInstance = new TestNestedExtensionLite().MakeReadOnly();
    private static readonly string[] _testNestedExtensionLiteFieldNames = new string[] {  };
    private static readonly uint[] _testNestedExtensionLiteFieldTags = new uint[] {  };
    public static TestNestedExtensionLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestNestedExtensionLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestNestedExtensionLite ThisMessage {
      get { return this; }
    }

    public const int NestedExtensionFieldNumber = 12345;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> NestedExtension;
    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testNestedExtensionLiteFieldNames;
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestNestedExtensionLite other = obj as TestNestedExtensionLite;
      if (other == null) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
    }
    #endregion

    public static TestNestedExtensionLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestNestedExtensionLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestNestedExtensionLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestNestedExtensionLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestNestedExtensionLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<TestNestedExtensionLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestNestedExtensionLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestNestedExtensionLite result;

      private TestNestedExtensionLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestNestedExtensionLite original = result;
          result = new TestNestedExtensionLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestNestedExtensionLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestNestedExtensionLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.DefaultInstance; }
      }

      public override TestNestedExtensionLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestNestedExtensionLite) {
          return MergeFrom((TestNestedExtensionLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestNestedExtensionLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.DefaultInstance) return this;
        PrepareBuilder();
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testNestedExtensionLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testNestedExtensionLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
          }
        }

        return this;
      }

    }
    static TestNestedExtensionLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestDeprecatedLite : pb::GeneratedMessageLite<TestDeprecatedLite, TestDeprecatedLite.Builder> {
    private TestDeprecatedLite() { }
    private static readonly TestDeprecatedLite defaultInstance = new TestDeprecatedLite().MakeReadOnly();
    private static readonly string[] _testDeprecatedLiteFieldNames = new string[] { "deprecated_field" };
    private static readonly uint[] _testDeprecatedLiteFieldTags = new uint[] { 8 };
    public static TestDeprecatedLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestDeprecatedLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestDeprecatedLite ThisMessage {
      get { return this; }
    }

    public const int DeprecatedFieldFieldNumber = 1;
    private bool hasDeprecatedField;
    private int deprecatedField_;
    [global::System.ObsoleteAttribute()]
    public bool HasDeprecatedField {
      get { return hasDeprecatedField; }
    }
    [global::System.ObsoleteAttribute()]
    public int DeprecatedField {
      get { return deprecatedField_; }
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testDeprecatedLiteFieldNames;
      if (hasDeprecatedField) {
        output.WriteInt32(1, field_names[0], DeprecatedField);
      }
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (hasDeprecatedField) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedField);
      }
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      if (hasDeprecatedField) {
        hash ^= deprecatedField_.GetHashCode();
      }
      return hash;
    }

    public override bool Equals(object obj) {
      TestDeprecatedLite other = obj as TestDeprecatedLite;
      if (other == null) return false;
      if (hasDeprecatedField != other.hasDeprecatedField || (hasDeprecatedField && !deprecatedField_.Equals(other.deprecatedField_))) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("deprecated_field", hasDeprecatedField, deprecatedField_, writer);
    }
    #endregion

    public static TestDeprecatedLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestDeprecatedLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestDeprecatedLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestDeprecatedLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestDeprecatedLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestDeprecatedLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<TestDeprecatedLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestDeprecatedLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestDeprecatedLite result;

      private TestDeprecatedLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestDeprecatedLite original = result;
          result = new TestDeprecatedLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestDeprecatedLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestDeprecatedLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.DefaultInstance; }
      }

      public override TestDeprecatedLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestDeprecatedLite) {
          return MergeFrom((TestDeprecatedLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestDeprecatedLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.HasDeprecatedField) {
          DeprecatedField = other.DeprecatedField;
        }
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testDeprecatedLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testDeprecatedLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 8: {
              result.hasDeprecatedField = input.ReadInt32(ref result.deprecatedField_);
              break;
            }
          }
        }

        return this;
      }


      [global::System.ObsoleteAttribute()]
      public bool HasDeprecatedField {
        get { return result.hasDeprecatedField; }
      }
      [global::System.ObsoleteAttribute()]
      public int DeprecatedField {
        get { return result.DeprecatedField; }
        set { SetDeprecatedField(value); }
      }
      [global::System.ObsoleteAttribute()]
      public Builder SetDeprecatedField(int value) {
        PrepareBuilder();
        result.hasDeprecatedField = true;
        result.deprecatedField_ = value;
        return this;
      }
      [global::System.ObsoleteAttribute()]
      public Builder ClearDeprecatedField() {
        PrepareBuilder();
        result.hasDeprecatedField = false;
        result.deprecatedField_ = 0;
        return this;
      }
    }
    static TestDeprecatedLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestParsingMergeLite : pb::ExtendableMessageLite<TestParsingMergeLite, TestParsingMergeLite.Builder> {
    private TestParsingMergeLite() { }
    private static readonly TestParsingMergeLite defaultInstance = new TestParsingMergeLite().MakeReadOnly();
    private static readonly string[] _testParsingMergeLiteFieldNames = new string[] { "optional_all_types", "optionalgroup", "repeated_all_types", "repeatedgroup", "required_all_types" };
    private static readonly uint[] _testParsingMergeLiteFieldTags = new uint[] { 18, 83, 26, 163, 10 };
    public static TestParsingMergeLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestParsingMergeLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestParsingMergeLite ThisMessage {
      get { return this; }
    }

    public const int OptionalExtFieldNumber = 1000;
    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> OptionalExt;
    public const int RepeatedExtFieldNumber = 1001;
    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> RepeatedExt;
    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class RepeatedFieldsGenerator : pb::GeneratedMessageLite<RepeatedFieldsGenerator, RepeatedFieldsGenerator.Builder> {
        private RepeatedFieldsGenerator() { }
        private static readonly RepeatedFieldsGenerator defaultInstance = new RepeatedFieldsGenerator().MakeReadOnly();
        private static readonly string[] _repeatedFieldsGeneratorFieldNames = new string[] { "ext1", "ext2", "field1", "field2", "field3", "group1", "group2" };
        private static readonly uint[] _repeatedFieldsGeneratorFieldTags = new uint[] { 8002, 8010, 10, 18, 26, 83, 163 };
        public static RepeatedFieldsGenerator DefaultInstance {
          get { return defaultInstance; }
        }

        public override RepeatedFieldsGenerator DefaultInstanceForType {
          get { return DefaultInstance; }
        }

        protected override RepeatedFieldsGenerator ThisMessage {
          get { return this; }
        }

        #region Nested types
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public static partial class Types {
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
          public sealed partial class Group1 : pb::GeneratedMessageLite<Group1, Group1.Builder> {
            private Group1() { }
            private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();
            private static readonly string[] _group1FieldNames = new string[] { "field1" };
            private static readonly uint[] _group1FieldTags = new uint[] { 90 };
            public static Group1 DefaultInstance {
              get { return defaultInstance; }
            }

            public override Group1 DefaultInstanceForType {
              get { return DefaultInstance; }
            }

            protected override Group1 ThisMessage {
              get { return this; }
            }

            public const int Field1FieldNumber = 11;
            private bool hasField1;
            private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite field1_;
            public bool HasField1 {
              get { return hasField1; }
            }
            public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite Field1 {
              get { return field1_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
            }

            public override bool IsInitialized {
              get {
                return true;
              }
            }

            public override void WriteTo(pb::ICodedOutputStream output) {
              CalcSerializedSize();
              string[] field_names = _group1FieldNames;
              if (hasField1) {
                output.WriteMessage(11, field_names[0], Field1);
              }
            }

            private int memoizedSerializedSize = -1;
            public override int SerializedSize {
              get {
                int size = memoizedSerializedSize;
                if (size != -1) return size;
                return CalcSerializedSize();
              }
            }

            private int CalcSerializedSize() {
              int size = memoizedSerializedSize;
              if (size != -1) return size;

              size = 0;
              if (hasField1) {
                size += pb::CodedOutputStream.ComputeMessageSize(11, Field1);
              }
              memoizedSerializedSize = size;
              return size;
            }
            #region Lite runtime methods
            public override int GetHashCode() {
              int hash = GetType().GetHashCode();
              if (hasField1) hash ^= field1_.GetHashCode();
              return hash;
            }

            public override bool Equals(object obj) {
              Group1 other = obj as Group1;
              if (other == null) return false;
              if (hasField1 != other.hasField1 || (hasField1 && !field1_.Equals(other.field1_))) return false;
              return true;
            }

            public override void PrintTo(global::System.IO.TextWriter writer) {
              PrintField("field1", hasField1, field1_, writer);
            }
            #endregion

            public static Group1 ParseFrom(pb::ByteString data) {
              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
            }
            public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
            }
            public static Group1 ParseFrom(byte[] data) {
              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
            }
            public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
            }
            public static Group1 ParseFrom(global::System.IO.Stream input) {
              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
            }
            public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
            }
            public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {
              return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
            }
            public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
              return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
            }
            public static Group1 ParseFrom(pb::ICodedInputStream input) {
              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
            }
            public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
            }
            private Group1 MakeReadOnly() {
              return this;
            }

            public static Builder CreateBuilder() { return new Builder(); }
            public override Builder ToBuilder() { return CreateBuilder(this); }
            public override Builder CreateBuilderForType() { return new Builder(); }
            public static Builder CreateBuilder(Group1 prototype) {
              return new Builder(prototype);
            }

            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            public sealed partial class Builder : pb::GeneratedBuilderLite<Group1, Builder> {
              protected override Builder ThisBuilder {
                get { return this; }
              }
              public Builder() {
                result = DefaultInstance;
                resultIsReadOnly = true;
              }
              internal Builder(Group1 cloneFrom) {
                result = cloneFrom;
                resultIsReadOnly = true;
              }

              private bool resultIsReadOnly;
              private Group1 result;

              private Group1 PrepareBuilder() {
                if (resultIsReadOnly) {
                  Group1 original = result;
                  result = new Group1();
                  resultIsReadOnly = false;
                  MergeFrom(original);
                }
                return result;
              }

              public override bool IsInitialized {
                get { return result.IsInitialized; }
              }

              protected override Group1 MessageBeingBuilt {
                get { return PrepareBuilder(); }
              }

              public override Builder Clear() {
                result = DefaultInstance;
                resultIsReadOnly = true;
                return this;
              }

              public override Builder Clone() {
                if (resultIsReadOnly) {
                  return new Builder(result);
                } else {
                  return new Builder().MergeFrom(result);
                }
              }

              public override Group1 DefaultInstanceForType {
                get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1.DefaultInstance; }
              }

              public override Group1 BuildPartial() {
                if (resultIsReadOnly) {
                  return result;
                }
                resultIsReadOnly = true;
                return result.MakeReadOnly();
              }

              public override Builder MergeFrom(pb::IMessageLite 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.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1.DefaultInstance) return this;
                PrepareBuilder();
                if (other.HasField1) {
                  MergeField1(other.Field1);
                }
                return this;
              }

              public override Builder MergeFrom(pb::ICodedInputStream input) {
                return MergeFrom(input, pb::ExtensionRegistry.Empty);
              }

              public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
                PrepareBuilder();
                uint tag;
                string field_name;
                while (input.ReadTag(out tag, out field_name)) {
                  if(tag == 0 && field_name != null) {
                    int field_ordinal = global::System.Array.BinarySearch(_group1FieldNames, field_name, global::System.StringComparer.Ordinal);
                    if(field_ordinal >= 0)
                      tag = _group1FieldTags[field_ordinal];
                    else {
                      ParseUnknownField(input, extensionRegistry, tag, field_name);
                      continue;
                    }
                  }
                  switch (tag) {
                    case 0: {
                      throw pb::InvalidProtocolBufferException.InvalidTag();
                    }
                    default: {
                      if (pb::WireFormat.IsEndGroupTag(tag)) {
                        return this;
                      }
                      ParseUnknownField(input, extensionRegistry, tag, field_name);
                      break;
                    }
                    case 90: {
                      global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder();
                      if (result.hasField1) {
                        subBuilder.MergeFrom(Field1);
                      }
                      input.ReadMessage(subBuilder, extensionRegistry);
                      Field1 = subBuilder.BuildPartial();
                      break;
                    }
                  }
                }

                return this;
              }


              public bool HasField1 {
               get { return result.hasField1; }
              }
              public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite Field1 {
                get { return result.Field1; }
                set { SetField1(value); }
              }
              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
                pb::ThrowHelper.ThrowIfNull(value, "value");
                PrepareBuilder();
                result.hasField1 = true;
                result.field1_ = value;
                return this;
              }
              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
                pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
                PrepareBuilder();
                result.hasField1 = true;
                result.field1_ = builderForValue.Build();
                return this;
              }
              public Builder MergeField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
                pb::ThrowHelper.ThrowIfNull(value, "value");
                PrepareBuilder();
                if (result.hasField1 &&
                    result.field1_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) {
                    result.field1_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder(result.field1_).MergeFrom(value).BuildPartial();
                } else {
                  result.field1_ = value;
                }
                result.hasField1 = true;
                return this;
              }
              public Builder ClearField1() {
                PrepareBuilder();
                result.hasField1 = false;
                result.field1_ = null;
                return this;
              }
            }
            static Group1() {
              object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
            }
          }

          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
          public sealed partial class Group2 : pb::GeneratedMessageLite<Group2, Group2.Builder> {
            private Group2() { }
            private static readonly Group2 defaultInstance = new Group2().MakeReadOnly();
            private static readonly string[] _group2FieldNames = new string[] { "field1" };
            private static readonly uint[] _group2FieldTags = new uint[] { 170 };
            public static Group2 DefaultInstance {
              get { return defaultInstance; }
            }

            public override Group2 DefaultInstanceForType {
              get { return DefaultInstance; }
            }

            protected override Group2 ThisMessage {
              get { return this; }
            }

            public const int Field1FieldNumber = 21;
            private bool hasField1;
            private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite field1_;
            public bool HasField1 {
              get { return hasField1; }
            }
            public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite Field1 {
              get { return field1_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
            }

            public override bool IsInitialized {
              get {
                return true;
              }
            }

            public override void WriteTo(pb::ICodedOutputStream output) {
              CalcSerializedSize();
              string[] field_names = _group2FieldNames;
              if (hasField1) {
                output.WriteMessage(21, field_names[0], Field1);
              }
            }

            private int memoizedSerializedSize = -1;
            public override int SerializedSize {
              get {
                int size = memoizedSerializedSize;
                if (size != -1) return size;
                return CalcSerializedSize();
              }
            }

            private int CalcSerializedSize() {
              int size = memoizedSerializedSize;
              if (size != -1) return size;

              size = 0;
              if (hasField1) {
                size += pb::CodedOutputStream.ComputeMessageSize(21, Field1);
              }
              memoizedSerializedSize = size;
              return size;
            }
            #region Lite runtime methods
            public override int GetHashCode() {
              int hash = GetType().GetHashCode();
              if (hasField1) hash ^= field1_.GetHashCode();
              return hash;
            }

            public override bool Equals(object obj) {
              Group2 other = obj as Group2;
              if (other == null) return false;
              if (hasField1 != other.hasField1 || (hasField1 && !field1_.Equals(other.field1_))) return false;
              return true;
            }

            public override void PrintTo(global::System.IO.TextWriter writer) {
              PrintField("field1", hasField1, field1_, writer);
            }
            #endregion

            public static Group2 ParseFrom(pb::ByteString data) {
              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
            }
            public static Group2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
            }
            public static Group2 ParseFrom(byte[] data) {
              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
            }
            public static Group2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
            }
            public static Group2 ParseFrom(global::System.IO.Stream input) {
              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
            }
            public static Group2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
            }
            public static Group2 ParseDelimitedFrom(global::System.IO.Stream input) {
              return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
            }
            public static Group2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
              return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
            }
            public static Group2 ParseFrom(pb::ICodedInputStream input) {
              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
            }
            public static Group2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
            }
            private Group2 MakeReadOnly() {
              return this;
            }

            public static Builder CreateBuilder() { return new Builder(); }
            public override Builder ToBuilder() { return CreateBuilder(this); }
            public override Builder CreateBuilderForType() { return new Builder(); }
            public static Builder CreateBuilder(Group2 prototype) {
              return new Builder(prototype);
            }

            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            public sealed partial class Builder : pb::GeneratedBuilderLite<Group2, Builder> {
              protected override Builder ThisBuilder {
                get { return this; }
              }
              public Builder() {
                result = DefaultInstance;
                resultIsReadOnly = true;
              }
              internal Builder(Group2 cloneFrom) {
                result = cloneFrom;
                resultIsReadOnly = true;
              }

              private bool resultIsReadOnly;
              private Group2 result;

              private Group2 PrepareBuilder() {
                if (resultIsReadOnly) {
                  Group2 original = result;
                  result = new Group2();
                  resultIsReadOnly = false;
                  MergeFrom(original);
                }
                return result;
              }

              public override bool IsInitialized {
                get { return result.IsInitialized; }
              }

              protected override Group2 MessageBeingBuilt {
                get { return PrepareBuilder(); }
              }

              public override Builder Clear() {
                result = DefaultInstance;
                resultIsReadOnly = true;
                return this;
              }

              public override Builder Clone() {
                if (resultIsReadOnly) {
                  return new Builder(result);
                } else {
                  return new Builder().MergeFrom(result);
                }
              }

              public override Group2 DefaultInstanceForType {
                get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2.DefaultInstance; }
              }

              public override Group2 BuildPartial() {
                if (resultIsReadOnly) {
                  return result;
                }
                resultIsReadOnly = true;
                return result.MakeReadOnly();
              }

              public override Builder MergeFrom(pb::IMessageLite other) {
                if (other is Group2) {
                  return MergeFrom((Group2) other);
                } else {
                  base.MergeFrom(other);
                  return this;
                }
              }

              public override Builder MergeFrom(Group2 other) {
                if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2.DefaultInstance) return this;
                PrepareBuilder();
                if (other.HasField1) {
                  MergeField1(other.Field1);
                }
                return this;
              }

              public override Builder MergeFrom(pb::ICodedInputStream input) {
                return MergeFrom(input, pb::ExtensionRegistry.Empty);
              }

              public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
                PrepareBuilder();
                uint tag;
                string field_name;
                while (input.ReadTag(out tag, out field_name)) {
                  if(tag == 0 && field_name != null) {
                    int field_ordinal = global::System.Array.BinarySearch(_group2FieldNames, field_name, global::System.StringComparer.Ordinal);
                    if(field_ordinal >= 0)
                      tag = _group2FieldTags[field_ordinal];
                    else {
                      ParseUnknownField(input, extensionRegistry, tag, field_name);
                      continue;
                    }
                  }
                  switch (tag) {
                    case 0: {
                      throw pb::InvalidProtocolBufferException.InvalidTag();
                    }
                    default: {
                      if (pb::WireFormat.IsEndGroupTag(tag)) {
                        return this;
                      }
                      ParseUnknownField(input, extensionRegistry, tag, field_name);
                      break;
                    }
                    case 170: {
                      global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder();
                      if (result.hasField1) {
                        subBuilder.MergeFrom(Field1);
                      }
                      input.ReadMessage(subBuilder, extensionRegistry);
                      Field1 = subBuilder.BuildPartial();
                      break;
                    }
                  }
                }

                return this;
              }


              public bool HasField1 {
               get { return result.hasField1; }
              }
              public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite Field1 {
                get { return result.Field1; }
                set { SetField1(value); }
              }
              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
                pb::ThrowHelper.ThrowIfNull(value, "value");
                PrepareBuilder();
                result.hasField1 = true;
                result.field1_ = value;
                return this;
              }
              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
                pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
                PrepareBuilder();
                result.hasField1 = true;
                result.field1_ = builderForValue.Build();
                return this;
              }
              public Builder MergeField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
                pb::ThrowHelper.ThrowIfNull(value, "value");
                PrepareBuilder();
                if (result.hasField1 &&
                    result.field1_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) {
                    result.field1_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder(result.field1_).MergeFrom(value).BuildPartial();
                } else {
                  result.field1_ = value;
                }
                result.hasField1 = true;
                return this;
              }
              public Builder ClearField1() {
                PrepareBuilder();
                result.hasField1 = false;
                result.field1_ = null;
                return this;
              }
            }
            static Group2() {
              object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
            }
          }

        }
        #endregion

        public const int Field1FieldNumber = 1;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> field1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Field1List {
          get { return field1_; }
        }
        public int Field1Count {
          get { return field1_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetField1(int index) {
          return field1_[index];
        }

        public const int Field2FieldNumber = 2;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> field2_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Field2List {
          get { return field2_; }
        }
        public int Field2Count {
          get { return field2_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetField2(int index) {
          return field2_[index];
        }

        public const int Field3FieldNumber = 3;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> field3_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Field3List {
          get { return field3_; }
        }
        public int Field3Count {
          get { return field3_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetField3(int index) {
          return field3_[index];
        }

        public const int Group1FieldNumber = 10;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1> Group1List {
          get { return group1_; }
        }
        public int Group1Count {
          get { return group1_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1 GetGroup1(int index) {
          return group1_[index];
        }

        public const int Group2FieldNumber = 20;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2> group2_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2> Group2List {
          get { return group2_; }
        }
        public int Group2Count {
          get { return group2_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2 GetGroup2(int index) {
          return group2_[index];
        }

        public const int Ext1FieldNumber = 1000;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> ext1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Ext1List {
          get { return ext1_; }
        }
        public int Ext1Count {
          get { return ext1_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetExt1(int index) {
          return ext1_[index];
        }

        public const int Ext2FieldNumber = 1001;
        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> ext2_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>();
        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Ext2List {
          get { return ext2_; }
        }
        public int Ext2Count {
          get { return ext2_.Count; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetExt2(int index) {
          return ext2_[index];
        }

        public override bool IsInitialized {
          get {
            return true;
          }
        }

        public override void WriteTo(pb::ICodedOutputStream output) {
          CalcSerializedSize();
          string[] field_names = _repeatedFieldsGeneratorFieldNames;
          if (field1_.Count > 0) {
            output.WriteMessageArray(1, field_names[2], field1_);
          }
          if (field2_.Count > 0) {
            output.WriteMessageArray(2, field_names[3], field2_);
          }
          if (field3_.Count > 0) {
            output.WriteMessageArray(3, field_names[4], field3_);
          }
          if (group1_.Count > 0) {
            output.WriteGroupArray(10, field_names[5], group1_);
          }
          if (group2_.Count > 0) {
            output.WriteGroupArray(20, field_names[6], group2_);
          }
          if (ext1_.Count > 0) {
            output.WriteMessageArray(1000, field_names[0], ext1_);
          }
          if (ext2_.Count > 0) {
            output.WriteMessageArray(1001, field_names[1], ext2_);
          }
        }

        private int memoizedSerializedSize = -1;
        public override int SerializedSize {
          get {
            int size = memoizedSerializedSize;
            if (size != -1) return size;
            return CalcSerializedSize();
          }
        }

        private int CalcSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;

          size = 0;
          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite element in Field1List) {
            size += pb::CodedOutputStream.ComputeMessageSize(1, element);
          }
          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite element in Field2List) {
            size += pb::CodedOutputStream.ComputeMessageSize(2, element);
          }
          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite element in Field3List) {
            size += pb::CodedOutputStream.ComputeMessageSize(3, element);
          }
          foreach (global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1 element in Group1List) {
            size += pb::CodedOutputStream.ComputeGroupSize(10, element);
          }
          foreach (global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2 element in Group2List) {
            size += pb::CodedOutputStream.ComputeGroupSize(20, element);
          }
          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite element in Ext1List) {
            size += pb::CodedOutputStream.ComputeMessageSize(1000, element);
          }
          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite element in Ext2List) {
            size += pb::CodedOutputStream.ComputeMessageSize(1001, element);
          }
          memoizedSerializedSize = size;
          return size;
        }
        #region Lite runtime methods
        public override int GetHashCode() {
          int hash = GetType().GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite i in field1_)
            hash ^= i.GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite i in field2_)
            hash ^= i.GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite i in field3_)
            hash ^= i.GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1 i in group1_)
            hash ^= i.GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2 i in group2_)
            hash ^= i.GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite i in ext1_)
            hash ^= i.GetHashCode();
          foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite i in ext2_)
            hash ^= i.GetHashCode();
          return hash;
        }

        public override bool Equals(object obj) {
          RepeatedFieldsGenerator other = obj as RepeatedFieldsGenerator;
          if (other == null) return false;
          if(field1_.Count != other.field1_.Count) return false;
          for(int ix=0; ix < field1_.Count; ix++)
            if(!field1_[ix].Equals(other.field1_[ix])) return false;
          if(field2_.Count != other.field2_.Count) return false;
          for(int ix=0; ix < field2_.Count; ix++)
            if(!field2_[ix].Equals(other.field2_[ix])) return false;
          if(field3_.Count != other.field3_.Count) return false;
          for(int ix=0; ix < field3_.Count; ix++)
            if(!field3_[ix].Equals(other.field3_[ix])) return false;
          if(group1_.Count != other.group1_.Count) return false;
          for(int ix=0; ix < group1_.Count; ix++)
            if(!group1_[ix].Equals(other.group1_[ix])) return false;
          if(group2_.Count != other.group2_.Count) return false;
          for(int ix=0; ix < group2_.Count; ix++)
            if(!group2_[ix].Equals(other.group2_[ix])) return false;
          if(ext1_.Count != other.ext1_.Count) return false;
          for(int ix=0; ix < ext1_.Count; ix++)
            if(!ext1_[ix].Equals(other.ext1_[ix])) return false;
          if(ext2_.Count != other.ext2_.Count) return false;
          for(int ix=0; ix < ext2_.Count; ix++)
            if(!ext2_[ix].Equals(other.ext2_[ix])) return false;
          return true;
        }

        public override void PrintTo(global::System.IO.TextWriter writer) {
          PrintField("field1", field1_, writer);
          PrintField("field2", field2_, writer);
          PrintField("field3", field3_, writer);
          PrintField("Group1", group1_, writer);
          PrintField("Group2", group2_, writer);
          PrintField("ext1", ext1_, writer);
          PrintField("ext2", ext2_, writer);
        }
        #endregion

        public static RepeatedFieldsGenerator ParseFrom(pb::ByteString data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(byte[] data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(global::System.IO.Stream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseDelimitedFrom(global::System.IO.Stream input) {
          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(pb::ICodedInputStream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static RepeatedFieldsGenerator ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        private RepeatedFieldsGenerator MakeReadOnly() {
          field1_.MakeReadOnly();
          field2_.MakeReadOnly();
          field3_.MakeReadOnly();
          group1_.MakeReadOnly();
          group2_.MakeReadOnly();
          ext1_.MakeReadOnly();
          ext2_.MakeReadOnly();
          return this;
        }

        public static Builder CreateBuilder() { return new Builder(); }
        public override Builder ToBuilder() { return CreateBuilder(this); }
        public override Builder CreateBuilderForType() { return new Builder(); }
        public static Builder CreateBuilder(RepeatedFieldsGenerator prototype) {
          return new Builder(prototype);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedFieldsGenerator, Builder> {
          protected override Builder ThisBuilder {
            get { return this; }
          }
          public Builder() {
            result = DefaultInstance;
            resultIsReadOnly = true;
          }
          internal Builder(RepeatedFieldsGenerator cloneFrom) {
            result = cloneFrom;
            resultIsReadOnly = true;
          }

          private bool resultIsReadOnly;
          private RepeatedFieldsGenerator result;

          private RepeatedFieldsGenerator PrepareBuilder() {
            if (resultIsReadOnly) {
              RepeatedFieldsGenerator original = result;
              result = new RepeatedFieldsGenerator();
              resultIsReadOnly = false;
              MergeFrom(original);
            }
            return result;
          }

          public override bool IsInitialized {
            get { return result.IsInitialized; }
          }

          protected override RepeatedFieldsGenerator MessageBeingBuilt {
            get { return PrepareBuilder(); }
          }

          public override Builder Clear() {
            result = DefaultInstance;
            resultIsReadOnly = true;
            return this;
          }

          public override Builder Clone() {
            if (resultIsReadOnly) {
              return new Builder(result);
            } else {
              return new Builder().MergeFrom(result);
            }
          }

          public override RepeatedFieldsGenerator DefaultInstanceForType {
            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.DefaultInstance; }
          }

          public override RepeatedFieldsGenerator BuildPartial() {
            if (resultIsReadOnly) {
              return result;
            }
            resultIsReadOnly = true;
            return result.MakeReadOnly();
          }

          public override Builder MergeFrom(pb::IMessageLite other) {
            if (other is RepeatedFieldsGenerator) {
              return MergeFrom((RepeatedFieldsGenerator) other);
            } else {
              base.MergeFrom(other);
              return this;
            }
          }

          public override Builder MergeFrom(RepeatedFieldsGenerator other) {
            if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.DefaultInstance) return this;
            PrepareBuilder();
            if (other.field1_.Count != 0) {
              result.field1_.Add(other.field1_);
            }
            if (other.field2_.Count != 0) {
              result.field2_.Add(other.field2_);
            }
            if (other.field3_.Count != 0) {
              result.field3_.Add(other.field3_);
            }
            if (other.group1_.Count != 0) {
              result.group1_.Add(other.group1_);
            }
            if (other.group2_.Count != 0) {
              result.group2_.Add(other.group2_);
            }
            if (other.ext1_.Count != 0) {
              result.ext1_.Add(other.ext1_);
            }
            if (other.ext2_.Count != 0) {
              result.ext2_.Add(other.ext2_);
            }
            return this;
          }

          public override Builder MergeFrom(pb::ICodedInputStream input) {
            return MergeFrom(input, pb::ExtensionRegistry.Empty);
          }

          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
            PrepareBuilder();
            uint tag;
            string field_name;
            while (input.ReadTag(out tag, out field_name)) {
              if(tag == 0 && field_name != null) {
                int field_ordinal = global::System.Array.BinarySearch(_repeatedFieldsGeneratorFieldNames, field_name, global::System.StringComparer.Ordinal);
                if(field_ordinal >= 0)
                  tag = _repeatedFieldsGeneratorFieldTags[field_ordinal];
                else {
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  continue;
                }
              }
              switch (tag) {
                case 0: {
                  throw pb::InvalidProtocolBufferException.InvalidTag();
                }
                default: {
                  if (pb::WireFormat.IsEndGroupTag(tag)) {
                    return this;
                  }
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  break;
                }
                case 10: {
                  input.ReadMessageArray(tag, field_name, result.field1_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance, extensionRegistry);
                  break;
                }
                case 18: {
                  input.ReadMessageArray(tag, field_name, result.field2_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance, extensionRegistry);
                  break;
                }
                case 26: {
                  input.ReadMessageArray(tag, field_name, result.field3_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance, extensionRegistry);
                  break;
                }
                case 83: {
                  input.ReadGroupArray(tag, field_name, result.group1_, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1.DefaultInstance, extensionRegistry);
                  break;
                }
                case 163: {
                  input.ReadGroupArray(tag, field_name, result.group2_, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2.DefaultInstance, extensionRegistry);
                  break;
                }
                case 8002: {
                  input.ReadMessageArray(tag, field_name, result.ext1_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance, extensionRegistry);
                  break;
                }
                case 8010: {
                  input.ReadMessageArray(tag, field_name, result.ext2_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance, extensionRegistry);
                  break;
                }
              }
            }

            return this;
          }


          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Field1List {
            get { return PrepareBuilder().field1_; }
          }
          public int Field1Count {
            get { return result.Field1Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetField1(int index) {
            return result.GetField1(index);
          }
          public Builder SetField1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.field1_[index] = value;
            return this;
          }
          public Builder SetField1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.field1_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.field1_.Add(value);
            return this;
          }
          public Builder AddField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.field1_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeField1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> values) {
            PrepareBuilder();
            result.field1_.Add(values);
            return this;
          }
          public Builder ClearField1() {
            PrepareBuilder();
            result.field1_.Clear();
            return this;
          }

          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Field2List {
            get { return PrepareBuilder().field2_; }
          }
          public int Field2Count {
            get { return result.Field2Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetField2(int index) {
            return result.GetField2(index);
          }
          public Builder SetField2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.field2_[index] = value;
            return this;
          }
          public Builder SetField2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.field2_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddField2(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.field2_.Add(value);
            return this;
          }
          public Builder AddField2(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.field2_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeField2(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> values) {
            PrepareBuilder();
            result.field2_.Add(values);
            return this;
          }
          public Builder ClearField2() {
            PrepareBuilder();
            result.field2_.Clear();
            return this;
          }

          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Field3List {
            get { return PrepareBuilder().field3_; }
          }
          public int Field3Count {
            get { return result.Field3Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetField3(int index) {
            return result.GetField3(index);
          }
          public Builder SetField3(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.field3_[index] = value;
            return this;
          }
          public Builder SetField3(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.field3_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddField3(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.field3_.Add(value);
            return this;
          }
          public Builder AddField3(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.field3_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeField3(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> values) {
            PrepareBuilder();
            result.field3_.Add(values);
            return this;
          }
          public Builder ClearField3() {
            PrepareBuilder();
            result.field3_.Clear();
            return this;
          }

          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1> Group1List {
            get { return PrepareBuilder().group1_; }
          }
          public int Group1Count {
            get { return result.Group1Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1 GetGroup1(int index) {
            return result.GetGroup1(index);
          }
          public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1 value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.group1_[index] = value;
            return this;
          }
          public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.group1_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1 value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.group1_.Add(value);
            return this;
          }
          public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.group1_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group1> values) {
            PrepareBuilder();
            result.group1_.Add(values);
            return this;
          }
          public Builder ClearGroup1() {
            PrepareBuilder();
            result.group1_.Clear();
            return this;
          }

          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2> Group2List {
            get { return PrepareBuilder().group2_; }
          }
          public int Group2Count {
            get { return result.Group2Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2 GetGroup2(int index) {
            return result.GetGroup2(index);
          }
          public Builder SetGroup2(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2 value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.group2_[index] = value;
            return this;
          }
          public Builder SetGroup2(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.group2_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddGroup2(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2 value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.group2_.Add(value);
            return this;
          }
          public Builder AddGroup2(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.group2_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeGroup2(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedFieldsGenerator.Types.Group2> values) {
            PrepareBuilder();
            result.group2_.Add(values);
            return this;
          }
          public Builder ClearGroup2() {
            PrepareBuilder();
            result.group2_.Clear();
            return this;
          }

          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Ext1List {
            get { return PrepareBuilder().ext1_; }
          }
          public int Ext1Count {
            get { return result.Ext1Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetExt1(int index) {
            return result.GetExt1(index);
          }
          public Builder SetExt1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.ext1_[index] = value;
            return this;
          }
          public Builder SetExt1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.ext1_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddExt1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.ext1_.Add(value);
            return this;
          }
          public Builder AddExt1(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.ext1_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeExt1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> values) {
            PrepareBuilder();
            result.ext1_.Add(values);
            return this;
          }
          public Builder ClearExt1() {
            PrepareBuilder();
            result.ext1_.Clear();
            return this;
          }

          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> Ext2List {
            get { return PrepareBuilder().ext2_; }
          }
          public int Ext2Count {
            get { return result.Ext2Count; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetExt2(int index) {
            return result.GetExt2(index);
          }
          public Builder SetExt2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.ext2_[index] = value;
            return this;
          }
          public Builder SetExt2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.ext2_[index] = builderForValue.Build();
            return this;
          }
          public Builder AddExt2(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.ext2_.Add(value);
            return this;
          }
          public Builder AddExt2(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.ext2_.Add(builderForValue.Build());
            return this;
          }
          public Builder AddRangeExt2(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> values) {
            PrepareBuilder();
            result.ext2_.Add(values);
            return this;
          }
          public Builder ClearExt2() {
            PrepareBuilder();
            result.ext2_.Clear();
            return this;
          }
        }
        static RepeatedFieldsGenerator() {
          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
        }
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class OptionalGroup : pb::GeneratedMessageLite<OptionalGroup, OptionalGroup.Builder> {
        private OptionalGroup() { }
        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();
        private static readonly string[] _optionalGroupFieldNames = new string[] { "optional_group_all_types" };
        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 90 };
        public static OptionalGroup DefaultInstance {
          get { return defaultInstance; }
        }

        public override OptionalGroup DefaultInstanceForType {
          get { return DefaultInstance; }
        }

        protected override OptionalGroup ThisMessage {
          get { return this; }
        }

        public const int OptionalGroupAllTypesFieldNumber = 11;
        private bool hasOptionalGroupAllTypes;
        private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite optionalGroupAllTypes_;
        public bool HasOptionalGroupAllTypes {
          get { return hasOptionalGroupAllTypes; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite OptionalGroupAllTypes {
          get { return optionalGroupAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
        }

        public override bool IsInitialized {
          get {
            return true;
          }
        }

        public override void WriteTo(pb::ICodedOutputStream output) {
          CalcSerializedSize();
          string[] field_names = _optionalGroupFieldNames;
          if (hasOptionalGroupAllTypes) {
            output.WriteMessage(11, field_names[0], OptionalGroupAllTypes);
          }
        }

        private int memoizedSerializedSize = -1;
        public override int SerializedSize {
          get {
            int size = memoizedSerializedSize;
            if (size != -1) return size;
            return CalcSerializedSize();
          }
        }

        private int CalcSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;

          size = 0;
          if (hasOptionalGroupAllTypes) {
            size += pb::CodedOutputStream.ComputeMessageSize(11, OptionalGroupAllTypes);
          }
          memoizedSerializedSize = size;
          return size;
        }
        #region Lite runtime methods
        public override int GetHashCode() {
          int hash = GetType().GetHashCode();
          if (hasOptionalGroupAllTypes) hash ^= optionalGroupAllTypes_.GetHashCode();
          return hash;
        }

        public override bool Equals(object obj) {
          OptionalGroup other = obj as OptionalGroup;
          if (other == null) return false;
          if (hasOptionalGroupAllTypes != other.hasOptionalGroupAllTypes || (hasOptionalGroupAllTypes && !optionalGroupAllTypes_.Equals(other.optionalGroupAllTypes_))) return false;
          return true;
        }

        public override void PrintTo(global::System.IO.TextWriter writer) {
          PrintField("optional_group_all_types", hasOptionalGroupAllTypes, optionalGroupAllTypes_, writer);
        }
        #endregion

        public static OptionalGroup ParseFrom(pb::ByteString data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(byte[] data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {
          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
        }
        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
        }
        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        private OptionalGroup MakeReadOnly() {
          return this;
        }

        public static Builder CreateBuilder() { return new Builder(); }
        public override Builder ToBuilder() { return CreateBuilder(this); }
        public override Builder CreateBuilderForType() { return new Builder(); }
        public static Builder CreateBuilder(OptionalGroup prototype) {
          return new Builder(prototype);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup, Builder> {
          protected override Builder ThisBuilder {
            get { return this; }
          }
          public Builder() {
            result = DefaultInstance;
            resultIsReadOnly = true;
          }
          internal Builder(OptionalGroup cloneFrom) {
            result = cloneFrom;
            resultIsReadOnly = true;
          }

          private bool resultIsReadOnly;
          private OptionalGroup result;

          private OptionalGroup PrepareBuilder() {
            if (resultIsReadOnly) {
              OptionalGroup original = result;
              result = new OptionalGroup();
              resultIsReadOnly = false;
              MergeFrom(original);
            }
            return result;
          }

          public override bool IsInitialized {
            get { return result.IsInitialized; }
          }

          protected override OptionalGroup MessageBeingBuilt {
            get { return PrepareBuilder(); }
          }

          public override Builder Clear() {
            result = DefaultInstance;
            resultIsReadOnly = true;
            return this;
          }

          public override Builder Clone() {
            if (resultIsReadOnly) {
              return new Builder(result);
            } else {
              return new Builder().MergeFrom(result);
            }
          }

          public override OptionalGroup DefaultInstanceForType {
            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.DefaultInstance; }
          }

          public override OptionalGroup BuildPartial() {
            if (resultIsReadOnly) {
              return result;
            }
            resultIsReadOnly = true;
            return result.MakeReadOnly();
          }

          public override Builder MergeFrom(pb::IMessageLite other) {
            if (other is OptionalGroup) {
              return MergeFrom((OptionalGroup) other);
            } else {
              base.MergeFrom(other);
              return this;
            }
          }

          public override Builder MergeFrom(OptionalGroup other) {
            if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.DefaultInstance) return this;
            PrepareBuilder();
            if (other.HasOptionalGroupAllTypes) {
              MergeOptionalGroupAllTypes(other.OptionalGroupAllTypes);
            }
            return this;
          }

          public override Builder MergeFrom(pb::ICodedInputStream input) {
            return MergeFrom(input, pb::ExtensionRegistry.Empty);
          }

          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
            PrepareBuilder();
            uint tag;
            string field_name;
            while (input.ReadTag(out tag, out field_name)) {
              if(tag == 0 && field_name != null) {
                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
                if(field_ordinal >= 0)
                  tag = _optionalGroupFieldTags[field_ordinal];
                else {
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  continue;
                }
              }
              switch (tag) {
                case 0: {
                  throw pb::InvalidProtocolBufferException.InvalidTag();
                }
                default: {
                  if (pb::WireFormat.IsEndGroupTag(tag)) {
                    return this;
                  }
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  break;
                }
                case 90: {
                  global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder();
                  if (result.hasOptionalGroupAllTypes) {
                    subBuilder.MergeFrom(OptionalGroupAllTypes);
                  }
                  input.ReadMessage(subBuilder, extensionRegistry);
                  OptionalGroupAllTypes = subBuilder.BuildPartial();
                  break;
                }
              }
            }

            return this;
          }


          public bool HasOptionalGroupAllTypes {
           get { return result.hasOptionalGroupAllTypes; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite OptionalGroupAllTypes {
            get { return result.OptionalGroupAllTypes; }
            set { SetOptionalGroupAllTypes(value); }
          }
          public Builder SetOptionalGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.hasOptionalGroupAllTypes = true;
            result.optionalGroupAllTypes_ = value;
            return this;
          }
          public Builder SetOptionalGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.hasOptionalGroupAllTypes = true;
            result.optionalGroupAllTypes_ = builderForValue.Build();
            return this;
          }
          public Builder MergeOptionalGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            if (result.hasOptionalGroupAllTypes &&
                result.optionalGroupAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) {
                result.optionalGroupAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder(result.optionalGroupAllTypes_).MergeFrom(value).BuildPartial();
            } else {
              result.optionalGroupAllTypes_ = value;
            }
            result.hasOptionalGroupAllTypes = true;
            return this;
          }
          public Builder ClearOptionalGroupAllTypes() {
            PrepareBuilder();
            result.hasOptionalGroupAllTypes = false;
            result.optionalGroupAllTypes_ = null;
            return this;
          }
        }
        static OptionalGroup() {
          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
        }
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class RepeatedGroup : pb::GeneratedMessageLite<RepeatedGroup, RepeatedGroup.Builder> {
        private RepeatedGroup() { }
        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();
        private static readonly string[] _repeatedGroupFieldNames = new string[] { "repeated_group_all_types" };
        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 170 };
        public static RepeatedGroup DefaultInstance {
          get { return defaultInstance; }
        }

        public override RepeatedGroup DefaultInstanceForType {
          get { return DefaultInstance; }
        }

        protected override RepeatedGroup ThisMessage {
          get { return this; }
        }

        public const int RepeatedGroupAllTypesFieldNumber = 21;
        private bool hasRepeatedGroupAllTypes;
        private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite repeatedGroupAllTypes_;
        public bool HasRepeatedGroupAllTypes {
          get { return hasRepeatedGroupAllTypes; }
        }
        public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite RepeatedGroupAllTypes {
          get { return repeatedGroupAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
        }

        public override bool IsInitialized {
          get {
            return true;
          }
        }

        public override void WriteTo(pb::ICodedOutputStream output) {
          CalcSerializedSize();
          string[] field_names = _repeatedGroupFieldNames;
          if (hasRepeatedGroupAllTypes) {
            output.WriteMessage(21, field_names[0], RepeatedGroupAllTypes);
          }
        }

        private int memoizedSerializedSize = -1;
        public override int SerializedSize {
          get {
            int size = memoizedSerializedSize;
            if (size != -1) return size;
            return CalcSerializedSize();
          }
        }

        private int CalcSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;

          size = 0;
          if (hasRepeatedGroupAllTypes) {
            size += pb::CodedOutputStream.ComputeMessageSize(21, RepeatedGroupAllTypes);
          }
          memoizedSerializedSize = size;
          return size;
        }
        #region Lite runtime methods
        public override int GetHashCode() {
          int hash = GetType().GetHashCode();
          if (hasRepeatedGroupAllTypes) hash ^= repeatedGroupAllTypes_.GetHashCode();
          return hash;
        }

        public override bool Equals(object obj) {
          RepeatedGroup other = obj as RepeatedGroup;
          if (other == null) return false;
          if (hasRepeatedGroupAllTypes != other.hasRepeatedGroupAllTypes || (hasRepeatedGroupAllTypes && !repeatedGroupAllTypes_.Equals(other.repeatedGroupAllTypes_))) return false;
          return true;
        }

        public override void PrintTo(global::System.IO.TextWriter writer) {
          PrintField("repeated_group_all_types", hasRepeatedGroupAllTypes, repeatedGroupAllTypes_, writer);
        }
        #endregion

        public static RepeatedGroup ParseFrom(pb::ByteString data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(byte[] data) {
          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {
          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
        }
        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {
          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
        }
        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
        }
        private RepeatedGroup MakeReadOnly() {
          return this;
        }

        public static Builder CreateBuilder() { return new Builder(); }
        public override Builder ToBuilder() { return CreateBuilder(this); }
        public override Builder CreateBuilderForType() { return new Builder(); }
        public static Builder CreateBuilder(RepeatedGroup prototype) {
          return new Builder(prototype);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup, Builder> {
          protected override Builder ThisBuilder {
            get { return this; }
          }
          public Builder() {
            result = DefaultInstance;
            resultIsReadOnly = true;
          }
          internal Builder(RepeatedGroup cloneFrom) {
            result = cloneFrom;
            resultIsReadOnly = true;
          }

          private bool resultIsReadOnly;
          private RepeatedGroup result;

          private RepeatedGroup PrepareBuilder() {
            if (resultIsReadOnly) {
              RepeatedGroup original = result;
              result = new RepeatedGroup();
              resultIsReadOnly = false;
              MergeFrom(original);
            }
            return result;
          }

          public override bool IsInitialized {
            get { return result.IsInitialized; }
          }

          protected override RepeatedGroup MessageBeingBuilt {
            get { return PrepareBuilder(); }
          }

          public override Builder Clear() {
            result = DefaultInstance;
            resultIsReadOnly = true;
            return this;
          }

          public override Builder Clone() {
            if (resultIsReadOnly) {
              return new Builder(result);
            } else {
              return new Builder().MergeFrom(result);
            }
          }

          public override RepeatedGroup DefaultInstanceForType {
            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup.DefaultInstance; }
          }

          public override RepeatedGroup BuildPartial() {
            if (resultIsReadOnly) {
              return result;
            }
            resultIsReadOnly = true;
            return result.MakeReadOnly();
          }

          public override Builder MergeFrom(pb::IMessageLite other) {
            if (other is RepeatedGroup) {
              return MergeFrom((RepeatedGroup) other);
            } else {
              base.MergeFrom(other);
              return this;
            }
          }

          public override Builder MergeFrom(RepeatedGroup other) {
            if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup.DefaultInstance) return this;
            PrepareBuilder();
            if (other.HasRepeatedGroupAllTypes) {
              MergeRepeatedGroupAllTypes(other.RepeatedGroupAllTypes);
            }
            return this;
          }

          public override Builder MergeFrom(pb::ICodedInputStream input) {
            return MergeFrom(input, pb::ExtensionRegistry.Empty);
          }

          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
            PrepareBuilder();
            uint tag;
            string field_name;
            while (input.ReadTag(out tag, out field_name)) {
              if(tag == 0 && field_name != null) {
                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
                if(field_ordinal >= 0)
                  tag = _repeatedGroupFieldTags[field_ordinal];
                else {
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  continue;
                }
              }
              switch (tag) {
                case 0: {
                  throw pb::InvalidProtocolBufferException.InvalidTag();
                }
                default: {
                  if (pb::WireFormat.IsEndGroupTag(tag)) {
                    return this;
                  }
                  ParseUnknownField(input, extensionRegistry, tag, field_name);
                  break;
                }
                case 170: {
                  global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder();
                  if (result.hasRepeatedGroupAllTypes) {
                    subBuilder.MergeFrom(RepeatedGroupAllTypes);
                  }
                  input.ReadMessage(subBuilder, extensionRegistry);
                  RepeatedGroupAllTypes = subBuilder.BuildPartial();
                  break;
                }
              }
            }

            return this;
          }


          public bool HasRepeatedGroupAllTypes {
           get { return result.hasRepeatedGroupAllTypes; }
          }
          public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite RepeatedGroupAllTypes {
            get { return result.RepeatedGroupAllTypes; }
            set { SetRepeatedGroupAllTypes(value); }
          }
          public Builder SetRepeatedGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            result.hasRepeatedGroupAllTypes = true;
            result.repeatedGroupAllTypes_ = value;
            return this;
          }
          public Builder SetRepeatedGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
            PrepareBuilder();
            result.hasRepeatedGroupAllTypes = true;
            result.repeatedGroupAllTypes_ = builderForValue.Build();
            return this;
          }
          public Builder MergeRepeatedGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
            pb::ThrowHelper.ThrowIfNull(value, "value");
            PrepareBuilder();
            if (result.hasRepeatedGroupAllTypes &&
                result.repeatedGroupAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) {
                result.repeatedGroupAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder(result.repeatedGroupAllTypes_).MergeFrom(value).BuildPartial();
            } else {
              result.repeatedGroupAllTypes_ = value;
            }
            result.hasRepeatedGroupAllTypes = true;
            return this;
          }
          public Builder ClearRepeatedGroupAllTypes() {
            PrepareBuilder();
            result.hasRepeatedGroupAllTypes = false;
            result.repeatedGroupAllTypes_ = null;
            return this;
          }
        }
        static RepeatedGroup() {
          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
        }
      }

    }
    #endregion

    public const int RequiredAllTypesFieldNumber = 1;
    private bool hasRequiredAllTypes;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite requiredAllTypes_;
    public bool HasRequiredAllTypes {
      get { return hasRequiredAllTypes; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite RequiredAllTypes {
      get { return requiredAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
    }

    public const int OptionalAllTypesFieldNumber = 2;
    private bool hasOptionalAllTypes;
    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite optionalAllTypes_;
    public bool HasOptionalAllTypes {
      get { return hasOptionalAllTypes; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite OptionalAllTypes {
      get { return optionalAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }
    }

    public const int RepeatedAllTypesFieldNumber = 3;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> repeatedAllTypes_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> RepeatedAllTypesList {
      get { return repeatedAllTypes_; }
    }
    public int RepeatedAllTypesCount {
      get { return repeatedAllTypes_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetRepeatedAllTypes(int index) {
      return repeatedAllTypes_[index];
    }

    public const int OptionalGroupFieldNumber = 10;
    private bool hasOptionalGroup;
    private global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup optionalGroup_;
    public bool HasOptionalGroup {
      get { return hasOptionalGroup; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup OptionalGroup {
      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.DefaultInstance; }
    }

    public const int RepeatedGroupFieldNumber = 20;
    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup>();
    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup> RepeatedGroupList {
      get { return repeatedGroup_; }
    }
    public int RepeatedGroupCount {
      get { return repeatedGroup_.Count; }
    }
    public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup GetRepeatedGroup(int index) {
      return repeatedGroup_[index];
    }

    public override bool IsInitialized {
      get {
        if (!hasRequiredAllTypes) return false;
        if (!ExtensionsAreInitialized) return false;
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testParsingMergeLiteFieldNames;
      pb::ExtendableMessageLite<TestParsingMergeLite, TestParsingMergeLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
      if (hasRequiredAllTypes) {
        output.WriteMessage(1, field_names[4], RequiredAllTypes);
      }
      if (hasOptionalAllTypes) {
        output.WriteMessage(2, field_names[0], OptionalAllTypes);
      }
      if (repeatedAllTypes_.Count > 0) {
        output.WriteMessageArray(3, field_names[2], repeatedAllTypes_);
      }
      if (hasOptionalGroup) {
        output.WriteGroup(10, field_names[1], OptionalGroup);
      }
      if (repeatedGroup_.Count > 0) {
        output.WriteGroupArray(20, field_names[3], repeatedGroup_);
      }
      extensionWriter.WriteUntil(536870912, output);
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (hasRequiredAllTypes) {
        size += pb::CodedOutputStream.ComputeMessageSize(1, RequiredAllTypes);
      }
      if (hasOptionalAllTypes) {
        size += pb::CodedOutputStream.ComputeMessageSize(2, OptionalAllTypes);
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite element in RepeatedAllTypesList) {
        size += pb::CodedOutputStream.ComputeMessageSize(3, element);
      }
      if (hasOptionalGroup) {
        size += pb::CodedOutputStream.ComputeGroupSize(10, OptionalGroup);
      }
      foreach (global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup element in RepeatedGroupList) {
        size += pb::CodedOutputStream.ComputeGroupSize(20, element);
      }
      size += ExtensionsSerializedSize;
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      if (hasRequiredAllTypes) hash ^= requiredAllTypes_.GetHashCode();
      if (hasOptionalAllTypes) hash ^= optionalAllTypes_.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite i in repeatedAllTypes_)
        hash ^= i.GetHashCode();
      if (hasOptionalGroup) hash ^= optionalGroup_.GetHashCode();
      foreach(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup i in repeatedGroup_)
        hash ^= i.GetHashCode();
      hash ^= base.GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestParsingMergeLite other = obj as TestParsingMergeLite;
      if (other == null) return false;
      if (hasRequiredAllTypes != other.hasRequiredAllTypes || (hasRequiredAllTypes && !requiredAllTypes_.Equals(other.requiredAllTypes_))) return false;
      if (hasOptionalAllTypes != other.hasOptionalAllTypes || (hasOptionalAllTypes && !optionalAllTypes_.Equals(other.optionalAllTypes_))) return false;
      if(repeatedAllTypes_.Count != other.repeatedAllTypes_.Count) return false;
      for(int ix=0; ix < repeatedAllTypes_.Count; ix++)
        if(!repeatedAllTypes_[ix].Equals(other.repeatedAllTypes_[ix])) return false;
      if (hasOptionalGroup != other.hasOptionalGroup || (hasOptionalGroup && !optionalGroup_.Equals(other.optionalGroup_))) return false;
      if(repeatedGroup_.Count != other.repeatedGroup_.Count) return false;
      for(int ix=0; ix < repeatedGroup_.Count; ix++)
        if(!repeatedGroup_[ix].Equals(other.repeatedGroup_[ix])) return false;
      if (!base.Equals(other)) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      PrintField("required_all_types", hasRequiredAllTypes, requiredAllTypes_, writer);
      PrintField("optional_all_types", hasOptionalAllTypes, optionalAllTypes_, writer);
      PrintField("repeated_all_types", repeatedAllTypes_, writer);
      PrintField("OptionalGroup", hasOptionalGroup, optionalGroup_, writer);
      PrintField("RepeatedGroup", repeatedGroup_, writer);
      base.PrintTo(writer);
    }
    #endregion

    public static TestParsingMergeLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestParsingMergeLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestParsingMergeLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestParsingMergeLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestParsingMergeLite MakeReadOnly() {
      repeatedAllTypes_.MakeReadOnly();
      repeatedGroup_.MakeReadOnly();
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestParsingMergeLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::ExtendableBuilderLite<TestParsingMergeLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestParsingMergeLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestParsingMergeLite result;

      private TestParsingMergeLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestParsingMergeLite original = result;
          result = new TestParsingMergeLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestParsingMergeLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestParsingMergeLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.DefaultInstance; }
      }

      public override TestParsingMergeLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestParsingMergeLite) {
          return MergeFrom((TestParsingMergeLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestParsingMergeLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.DefaultInstance) return this;
        PrepareBuilder();
        if (other.HasRequiredAllTypes) {
          MergeRequiredAllTypes(other.RequiredAllTypes);
        }
        if (other.HasOptionalAllTypes) {
          MergeOptionalAllTypes(other.OptionalAllTypes);
        }
        if (other.repeatedAllTypes_.Count != 0) {
          result.repeatedAllTypes_.Add(other.repeatedAllTypes_);
        }
        if (other.HasOptionalGroup) {
          MergeOptionalGroup(other.OptionalGroup);
        }
        if (other.repeatedGroup_.Count != 0) {
          result.repeatedGroup_.Add(other.repeatedGroup_);
        }
          this.MergeExtensionFields(other);
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testParsingMergeLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testParsingMergeLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
            case 10: {
              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder();
              if (result.hasRequiredAllTypes) {
                subBuilder.MergeFrom(RequiredAllTypes);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              RequiredAllTypes = subBuilder.BuildPartial();
              break;
            }
            case 18: {
              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder();
              if (result.hasOptionalAllTypes) {
                subBuilder.MergeFrom(OptionalAllTypes);
              }
              input.ReadMessage(subBuilder, extensionRegistry);
              OptionalAllTypes = subBuilder.BuildPartial();
              break;
            }
            case 26: {
              input.ReadMessageArray(tag, field_name, result.repeatedAllTypes_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance, extensionRegistry);
              break;
            }
            case 83: {
              global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.CreateBuilder();
              if (result.hasOptionalGroup) {
                subBuilder.MergeFrom(OptionalGroup);
              }
              input.ReadGroup(10, subBuilder, extensionRegistry);
              OptionalGroup = subBuilder.BuildPartial();
              break;
            }
            case 163: {
              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup.DefaultInstance, extensionRegistry);
              break;
            }
          }
        }

        return this;
      }


      public bool HasRequiredAllTypes {
       get { return result.hasRequiredAllTypes; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite RequiredAllTypes {
        get { return result.RequiredAllTypes; }
        set { SetRequiredAllTypes(value); }
      }
      public Builder SetRequiredAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasRequiredAllTypes = true;
        result.requiredAllTypes_ = value;
        return this;
      }
      public Builder SetRequiredAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasRequiredAllTypes = true;
        result.requiredAllTypes_ = builderForValue.Build();
        return this;
      }
      public Builder MergeRequiredAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasRequiredAllTypes &&
            result.requiredAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) {
            result.requiredAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder(result.requiredAllTypes_).MergeFrom(value).BuildPartial();
        } else {
          result.requiredAllTypes_ = value;
        }
        result.hasRequiredAllTypes = true;
        return this;
      }
      public Builder ClearRequiredAllTypes() {
        PrepareBuilder();
        result.hasRequiredAllTypes = false;
        result.requiredAllTypes_ = null;
        return this;
      }

      public bool HasOptionalAllTypes {
       get { return result.hasOptionalAllTypes; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite OptionalAllTypes {
        get { return result.OptionalAllTypes; }
        set { SetOptionalAllTypes(value); }
      }
      public Builder SetOptionalAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalAllTypes = true;
        result.optionalAllTypes_ = value;
        return this;
      }
      public Builder SetOptionalAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalAllTypes = true;
        result.optionalAllTypes_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalAllTypes &&
            result.optionalAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) {
            result.optionalAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.CreateBuilder(result.optionalAllTypes_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalAllTypes_ = value;
        }
        result.hasOptionalAllTypes = true;
        return this;
      }
      public Builder ClearOptionalAllTypes() {
        PrepareBuilder();
        result.hasOptionalAllTypes = false;
        result.optionalAllTypes_ = null;
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> RepeatedAllTypesList {
        get { return PrepareBuilder().repeatedAllTypes_; }
      }
      public int RepeatedAllTypesCount {
        get { return result.RepeatedAllTypesCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite GetRepeatedAllTypes(int index) {
        return result.GetRepeatedAllTypes(index);
      }
      public Builder SetRepeatedAllTypes(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedAllTypes_[index] = value;
        return this;
      }
      public Builder SetRepeatedAllTypes(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedAllTypes_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedAllTypes_.Add(value);
        return this;
      }
      public Builder AddRepeatedAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedAllTypes_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedAllTypes(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite> values) {
        PrepareBuilder();
        result.repeatedAllTypes_.Add(values);
        return this;
      }
      public Builder ClearRepeatedAllTypes() {
        PrepareBuilder();
        result.repeatedAllTypes_.Clear();
        return this;
      }

      public bool HasOptionalGroup {
       get { return result.hasOptionalGroup; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup OptionalGroup {
        get { return result.OptionalGroup; }
        set { SetOptionalGroup(value); }
      }
      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.hasOptionalGroup = true;
        result.optionalGroup_ = value;
        return this;
      }
      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.hasOptionalGroup = true;
        result.optionalGroup_ = builderForValue.Build();
        return this;
      }
      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        if (result.hasOptionalGroup &&
            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.DefaultInstance) {
            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();
        } else {
          result.optionalGroup_ = value;
        }
        result.hasOptionalGroup = true;
        return this;
      }
      public Builder ClearOptionalGroup() {
        PrepareBuilder();
        result.hasOptionalGroup = false;
        result.optionalGroup_ = null;
        return this;
      }

      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup> RepeatedGroupList {
        get { return PrepareBuilder().repeatedGroup_; }
      }
      public int RepeatedGroupCount {
        get { return result.RepeatedGroupCount; }
      }
      public global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup GetRepeatedGroup(int index) {
        return result.GetRepeatedGroup(index);
      }
      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedGroup_[index] = value;
        return this;
      }
      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedGroup_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        PrepareBuilder();
        result.repeatedGroup_.Add(value);
        return this;
      }
      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        PrepareBuilder();
        result.repeatedGroup_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestParsingMergeLite.Types.RepeatedGroup> values) {
        PrepareBuilder();
        result.repeatedGroup_.Add(values);
        return this;
      }
      public Builder ClearRepeatedGroup() {
        PrepareBuilder();
        result.repeatedGroup_.Clear();
        return this;
      }
    }
    static TestParsingMergeLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestEmptyMessageLite : pb::GeneratedMessageLite<TestEmptyMessageLite, TestEmptyMessageLite.Builder> {
    private TestEmptyMessageLite() { }
    private static readonly TestEmptyMessageLite defaultInstance = new TestEmptyMessageLite().MakeReadOnly();
    private static readonly string[] _testEmptyMessageLiteFieldNames = new string[] {  };
    private static readonly uint[] _testEmptyMessageLiteFieldTags = new uint[] {  };
    public static TestEmptyMessageLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestEmptyMessageLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestEmptyMessageLite ThisMessage {
      get { return this; }
    }

    public override bool IsInitialized {
      get {
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testEmptyMessageLiteFieldNames;
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestEmptyMessageLite other = obj as TestEmptyMessageLite;
      if (other == null) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
    }
    #endregion

    public static TestEmptyMessageLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestEmptyMessageLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestEmptyMessageLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestEmptyMessageLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestEmptyMessageLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::GeneratedBuilderLite<TestEmptyMessageLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestEmptyMessageLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestEmptyMessageLite result;

      private TestEmptyMessageLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestEmptyMessageLite original = result;
          result = new TestEmptyMessageLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestEmptyMessageLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestEmptyMessageLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageLite.DefaultInstance; }
      }

      public override TestEmptyMessageLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestEmptyMessageLite) {
          return MergeFrom((TestEmptyMessageLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestEmptyMessageLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageLite.DefaultInstance) return this;
        PrepareBuilder();
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testEmptyMessageLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
          }
        }

        return this;
      }

    }
    static TestEmptyMessageLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestEmptyMessageWithExtensionsLite : pb::ExtendableMessageLite<TestEmptyMessageWithExtensionsLite, TestEmptyMessageWithExtensionsLite.Builder> {
    private TestEmptyMessageWithExtensionsLite() { }
    private static readonly TestEmptyMessageWithExtensionsLite defaultInstance = new TestEmptyMessageWithExtensionsLite().MakeReadOnly();
    private static readonly string[] _testEmptyMessageWithExtensionsLiteFieldNames = new string[] {  };
    private static readonly uint[] _testEmptyMessageWithExtensionsLiteFieldTags = new uint[] {  };
    public static TestEmptyMessageWithExtensionsLite DefaultInstance {
      get { return defaultInstance; }
    }

    public override TestEmptyMessageWithExtensionsLite DefaultInstanceForType {
      get { return DefaultInstance; }
    }

    protected override TestEmptyMessageWithExtensionsLite ThisMessage {
      get { return this; }
    }

    public override bool IsInitialized {
      get {
        if (!ExtensionsAreInitialized) return false;
        return true;
      }
    }

    public override void WriteTo(pb::ICodedOutputStream output) {
      CalcSerializedSize();
      string[] field_names = _testEmptyMessageWithExtensionsLiteFieldNames;
      pb::ExtendableMessageLite<TestEmptyMessageWithExtensionsLite, TestEmptyMessageWithExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
      extensionWriter.WriteUntil(536870912, output);
    }

    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        return CalcSerializedSize();
      }
    }

    private int CalcSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      size += ExtensionsSerializedSize;
      memoizedSerializedSize = size;
      return size;
    }
    #region Lite runtime methods
    public override int GetHashCode() {
      int hash = GetType().GetHashCode();
      hash ^= base.GetHashCode();
      return hash;
    }

    public override bool Equals(object obj) {
      TestEmptyMessageWithExtensionsLite other = obj as TestEmptyMessageWithExtensionsLite;
      if (other == null) return false;
      if (!base.Equals(other)) return false;
      return true;
    }

    public override void PrintTo(global::System.IO.TextWriter writer) {
      base.PrintTo(writer);
    }
    #endregion

    public static TestEmptyMessageWithExtensionsLite ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(pb::ICodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static TestEmptyMessageWithExtensionsLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    private TestEmptyMessageWithExtensionsLite MakeReadOnly() {
      return this;
    }

    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(TestEmptyMessageWithExtensionsLite prototype) {
      return new Builder(prototype);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class Builder : pb::ExtendableBuilderLite<TestEmptyMessageWithExtensionsLite, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {
        result = DefaultInstance;
        resultIsReadOnly = true;
      }
      internal Builder(TestEmptyMessageWithExtensionsLite cloneFrom) {
        result = cloneFrom;
        resultIsReadOnly = true;
      }

      private bool resultIsReadOnly;
      private TestEmptyMessageWithExtensionsLite result;

      private TestEmptyMessageWithExtensionsLite PrepareBuilder() {
        if (resultIsReadOnly) {
          TestEmptyMessageWithExtensionsLite original = result;
          result = new TestEmptyMessageWithExtensionsLite();
          resultIsReadOnly = false;
          MergeFrom(original);
        }
        return result;
      }

      public override bool IsInitialized {
        get { return result.IsInitialized; }
      }

      protected override TestEmptyMessageWithExtensionsLite MessageBeingBuilt {
        get { return PrepareBuilder(); }
      }

      public override Builder Clear() {
        result = DefaultInstance;
        resultIsReadOnly = true;
        return this;
      }

      public override Builder Clone() {
        if (resultIsReadOnly) {
          return new Builder(result);
        } else {
          return new Builder().MergeFrom(result);
        }
      }

      public override TestEmptyMessageWithExtensionsLite DefaultInstanceForType {
        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensionsLite.DefaultInstance; }
      }

      public override TestEmptyMessageWithExtensionsLite BuildPartial() {
        if (resultIsReadOnly) {
          return result;
        }
        resultIsReadOnly = true;
        return result.MakeReadOnly();
      }

      public override Builder MergeFrom(pb::IMessageLite other) {
        if (other is TestEmptyMessageWithExtensionsLite) {
          return MergeFrom((TestEmptyMessageWithExtensionsLite) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }

      public override Builder MergeFrom(TestEmptyMessageWithExtensionsLite other) {
        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensionsLite.DefaultInstance) return this;
        PrepareBuilder();
          this.MergeExtensionFields(other);
        return this;
      }

      public override Builder MergeFrom(pb::ICodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }

      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        PrepareBuilder();
        uint tag;
        string field_name;
        while (input.ReadTag(out tag, out field_name)) {
          if(tag == 0 && field_name != null) {
            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageWithExtensionsLiteFieldNames, field_name, global::System.StringComparer.Ordinal);
            if(field_ordinal >= 0)
              tag = _testEmptyMessageWithExtensionsLiteFieldTags[field_ordinal];
            else {
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              continue;
            }
          }
          switch (tag) {
            case 0: {
              throw pb::InvalidProtocolBufferException.InvalidTag();
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                return this;
              }
              ParseUnknownField(input, extensionRegistry, tag, field_name);
              break;
            }
          }
        }

        return this;
      }

    }
    static TestEmptyMessageWithExtensionsLite() {
      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestLite.Descriptor, null);
    }
  }

  #endregion

}

#endregion Designer generated code
