// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd

// LINT: ALLOW_GROUPS, LEGACY_NAMES

syntax = "proto2";

import "objectivec/Tests/unittest_import.proto";

// Explicit empty prefix, tests some validations code paths also.
option objc_class_prefix = "";

package objc.protobuf.tests;

// This proto includes every type of field in both singular and repeated
// forms.
message TestAllTypes {
  message NestedMessage {
    // The field name "b" fails to compile in proto1 because it conflicts with
    // a local variable named "b" in one of the generated methods.  Doh.
    // This file needs to compile in proto1 to test backwards-compatibility.
    optional int32 bb = 1;
  }

  enum NestedEnum {
    FOO = 1;
    BAR = 2;
    BAZ = 3;
    NEG = -1;  // Intentionally negative.
  }

  // Singular
  optional    int32 optional_int32    =  1;
  optional    int64 optional_int64    =  2;
  optional   uint32 optional_uint32   =  3;
  optional   uint64 optional_uint64   =  4;
  optional   sint32 optional_sint32   =  5;
  optional   sint64 optional_sint64   =  6;
  optional  fixed32 optional_fixed32  =  7;
  optional  fixed64 optional_fixed64  =  8;
  optional sfixed32 optional_sfixed32 =  9;
  optional sfixed64 optional_sfixed64 = 10;
  optional    float optional_float    = 11;
  optional   double optional_double   = 12;
  optional     bool optional_bool     = 13;
  optional   string optional_string   = 14;
  optional    bytes optional_bytes    = 15;

  optional group OptionalGroup = 16 {
    optional int32 a = 17;
  }

  optional NestedMessage                        optional_nested_message  = 18;
  optional ForeignMessage                       optional_foreign_message = 19;
  optional objc.protobuf.tests.import.Message   optional_import_message  = 20;

  optional NestedEnum                           optional_nested_enum     = 21;
  optional ForeignEnum                          optional_foreign_enum    = 22;
  optional objc.protobuf.tests.import.Enum      optional_import_enum     = 23;

  optional string optional_string_piece = 24 [ctype=STRING_PIECE];
  optional string optional_cord = 25 [ctype=CORD];

  // Defined in unittest_import_public.proto
  optional objc.protobuf.tests.public_import.Message
      optional_public_import_message = 26;

  optional NestedMessage optional_lazy_message = 27 [lazy=true];
  optional NestedMessage optional_unverified_lazy_message = 28 [unverified_lazy=true];

  // Repeated
  repeated    int32 repeated_int32    = 31;
  repeated    int64 repeated_int64    = 32;
  repeated   uint32 repeated_uint32   = 33;
  repeated   uint64 repeated_uint64   = 34;
  repeated   sint32 repeated_sint32   = 35;
  repeated   sint64 repeated_sint64   = 36;
  repeated  fixed32 repeated_fixed32  = 37;
  repeated  fixed64 repeated_fixed64  = 38;
  repeated sfixed32 repeated_sfixed32 = 39;
  repeated sfixed64 repeated_sfixed64 = 40;
  repeated    float repeated_float    = 41;
  repeated   double repeated_double   = 42;
  repeated     bool repeated_bool     = 43;
  repeated   string repeated_string   = 44;
  repeated    bytes repeated_bytes    = 45;

  repeated group RepeatedGroup = 46 {
    optional int32 a = 47;
  }

  repeated NestedMessage                        repeated_nested_message  = 48;
  repeated ForeignMessage                       repeated_foreign_message = 49;
  repeated objc.protobuf.tests.import.Message   repeated_import_message  = 50;

  repeated NestedEnum                           repeated_nested_enum     = 51;
  repeated ForeignEnum                          repeated_foreign_enum    = 52;
  repeated objc.protobuf.tests.import.Enum      repeated_import_enum     = 53;

  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
  repeated string repeated_cord = 55 [ctype=CORD];

  repeated NestedMessage repeated_lazy_message = 57 ;

  // Singular with defaults
  optional    int32 default_int32    = 61 [default =  41    ];
  optional    int64 default_int64    = 62 [default =  42    ];
  optional   uint32 default_uint32   = 63 [default =  43    ];
  optional   uint64 default_uint64   = 64 [default =  44    ];
  optional   sint32 default_sint32   = 65 [default = -45    ];
  optional   sint64 default_sint64   = 66 [default =  46    ];
  optional  fixed32 default_fixed32  = 67 [default =  47    ];
  optional  fixed64 default_fixed64  = 68 [default =  48    ];
  optional sfixed32 default_sfixed32 = 69 [default =  49    ];
  optional sfixed64 default_sfixed64 = 70 [default = -50    ];
  optional    float default_float    = 71 [default =  51.5  ];
  optional   double default_double   = 72 [default =  52e3  ];
  optional     bool default_bool     = 73 [default = true   ];
  optional   string default_string   = 74 [default = "hello"];
  optional    bytes default_bytes    = 75 [default = "world"];

  optional NestedEnum  default_nested_enum  = 81 [default = BAR        ];
  optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
  optional objc.protobuf.tests.import.Enum
      default_import_enum = 83 [default = IMPORT_BAR];

  optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
  optional string default_cord = 85 [ctype=CORD,default="123"];

  // For oneof test
  oneof oneof_field {
    uint32 oneof_uint32 = 111;
    NestedMessage oneof_nested_message = 112;
    string oneof_string = 113;
    bytes oneof_bytes = 114;
  }
}

// This proto includes a recursively nested message.
message NestedTestAllTypes {
  optional NestedTestAllTypes child = 1;
  optional TestAllTypes payload = 2;
  repeated NestedTestAllTypes repeated_child = 3;
  optional NestedTestAllTypes lazy_child = 4 [lazy=true];
  optional TestAllTypes eager_child = 5 [lazy=false];
}

message TestDeprecatedFields {
  optional int32 deprecated_int32 = 1 [deprecated=true];
  oneof oneof_fields {
    int32 deprecated_int32_in_oneof = 2 [deprecated=true];
  }
}

message TestDeprecatedMessage {
  option deprecated = true;
}

// Define these after TestAllTypes to make sure the compiler can handle
// that.
message ForeignMessage {
  optional int32 c = 1;
  optional int32 d = 2;
}

enum ForeignEnum {
  FOREIGN_FOO = 4;
  FOREIGN_BAR = 5;
  FOREIGN_BAZ = 6;
}

message TestReservedFields {
  reserved 2, 15, 9 to 11;
  reserved "bar", "baz";
}

enum TestReservedEnumFields {
  UNKNOWN = 0;
  reserved 2, 15, 9 to 11;
  reserved "bar", "baz";
}

message TestAllExtensions {
  extensions 1 to max;
}

extend TestAllExtensions {
  // Singular
  optional    int32 optional_int32_extension    =  1;
  optional    int64 optional_int64_extension    =  2;
  optional   uint32 optional_uint32_extension   =  3;
  optional   uint64 optional_uint64_extension   =  4;
  optional   sint32 optional_sint32_extension   =  5;
  optional   sint64 optional_sint64_extension   =  6;
  optional  fixed32 optional_fixed32_extension  =  7;
  optional  fixed64 optional_fixed64_extension  =  8;
  optional sfixed32 optional_sfixed32_extension =  9;
  optional sfixed64 optional_sfixed64_extension = 10;
  optional    float optional_float_extension    = 11;
  optional   double optional_double_extension   = 12;
  optional     bool optional_bool_extension     = 13;
  optional   string optional_string_extension   = 14;
  optional    bytes optional_bytes_extension    = 15;

  optional group OptionalGroup_extension = 16 {
    optional int32 a = 17;
  }

  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  optional ForeignMessage optional_foreign_message_extension = 19;
  optional objc.protobuf.tests.import.Message
    optional_import_message_extension = 20;

  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
  optional ForeignEnum optional_foreign_enum_extension = 22;
  optional objc.protobuf.tests.import.Enum
    optional_import_enum_extension = 23;

  optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
  optional string optional_cord_extension = 25;

  optional objc.protobuf.tests.public_import.Message
    optional_public_import_message_extension = 26;

  optional TestAllTypes.NestedMessage
    optional_lazy_message_extension = 27 [lazy=true];
  optional TestAllTypes.NestedMessage
    optional_unverified_lazy_message_extension = 28 [unverified_lazy=true];

  // Repeated
  repeated    int32 repeated_int32_extension    = 31;
  repeated    int64 repeated_int64_extension    = 32;
  repeated   uint32 repeated_uint32_extension   = 33;
  repeated   uint64 repeated_uint64_extension   = 34;
  repeated   sint32 repeated_sint32_extension   = 35;
  repeated   sint64 repeated_sint64_extension   = 36;
  repeated  fixed32 repeated_fixed32_extension  = 37;
  repeated  fixed64 repeated_fixed64_extension  = 38;
  repeated sfixed32 repeated_sfixed32_extension = 39;
  repeated sfixed64 repeated_sfixed64_extension = 40;
  repeated    float repeated_float_extension    = 41;
  repeated   double repeated_double_extension   = 42;
  repeated     bool repeated_bool_extension     = 43;
  repeated   string repeated_string_extension   = 44;
  repeated    bytes repeated_bytes_extension    = 45;

  repeated group RepeatedGroup_extension = 46 {
    optional int32 a = 47;
  }

  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  repeated ForeignMessage repeated_foreign_message_extension = 49;
  repeated objc.protobuf.tests.import.Message
    repeated_import_message_extension = 50;

  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
  repeated ForeignEnum repeated_foreign_enum_extension = 52;
  repeated objc.protobuf.tests.import.Enum
    repeated_import_enum_extension = 53;

  repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
  repeated string repeated_cord_extension = 55;

  repeated TestAllTypes.NestedMessage
    repeated_lazy_message_extension = 57 [lazy=true];

  // Singular with defaults
  optional    int32 default_int32_extension    = 61 [default =  41    ];
  optional    int64 default_int64_extension    = 62 [default =  42    ];
  optional   uint32 default_uint32_extension   = 63 [default =  43    ];
  optional   uint64 default_uint64_extension   = 64 [default =  44    ];
  optional   sint32 default_sint32_extension   = 65 [default = -45    ];
  optional   sint64 default_sint64_extension   = 66 [default =  46    ];
  optional  fixed32 default_fixed32_extension  = 67 [default =  47    ];
  optional  fixed64 default_fixed64_extension  = 68 [default =  48    ];
  optional sfixed32 default_sfixed32_extension = 69 [default =  49    ];
  optional sfixed64 default_sfixed64_extension = 70 [default = -50    ];
  optional    float default_float_extension    = 71 [default =  51.5  ];
  optional   double default_double_extension   = 72 [default =  52e3  ];
  optional     bool default_bool_extension     = 73 [default = true   ];
  optional   string default_string_extension   = 74 [default = "hello"];
  optional    bytes default_bytes_extension    = 75 [default = "world"];

  optional TestAllTypes.NestedEnum
    default_nested_enum_extension = 81 [default = BAR];
  optional ForeignEnum
    default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
  optional objc.protobuf.tests.import.Enum
    default_import_enum_extension = 83 [default = IMPORT_BAR];

  optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
                                                       default="abc"];
  optional string default_cord_extension = 85 [default="123"];

  // For oneof test
  optional uint32 oneof_uint32_extension = 111;
  optional TestAllTypes.NestedMessage oneof_nested_message_extension = 112;
  optional string oneof_string_extension = 113;
  optional bytes oneof_bytes_extension = 114;
}

message TestMixedFieldsAndExtensions {
  optional int32 a = 1;
  repeated fixed32 b = 3;
  extensions 2, 4;
  extend TestMixedFieldsAndExtensions {
    optional int32 c = 2;
    repeated fixed32 d = 4;
  }
}

message TestGroup {
  optional group OptionalGroup = 16 {
    optional int32 a = 17;
  }
  optional ForeignEnum optional_foreign_enum = 22;
}

message TestGroupExtension {
  extensions 1 to max;
}

message TestNestedExtension {
  extend TestAllExtensions {
    // Check for bug where string extensions declared in tested scope did not
    // compile.
    optional string test = 1002 [default="test"];
    // Used to test if generated extension name is correct when there are
    // underscores.
    optional string nested_string_extension = 1003;
  }

  extend TestGroupExtension {
    optional group OptionalGroup_extension = 16 {
      optional int32 a = 17;
    }
    optional ForeignEnum optional_foreign_enum_extension = 22;
  }
}

message TestChildExtension {
  optional string a = 1;
  optional string b = 2;
  optional TestAllExtensions optional_extension = 3;
}

// Emulates wireformat data of TestChildExtension with dynamic extension
// (DynamicExtension).
message TestChildExtensionData {
  message NestedTestAllExtensionsData {
    message NestedDynamicExtensions {
      optional int32 a = 1;
      optional int32 b = 2;
    }
    optional NestedDynamicExtensions dynamic = 409707008;
  }
  optional string a = 1;
  optional string b = 2;
  optional NestedTestAllExtensionsData optional_extension = 3;
}

message TestNestedChildExtension {
  optional int32 a = 1;
  optional TestChildExtension child = 2;
}

// Emulates wireformat data of TestNestedChildExtension with dynamic extension
// (DynamicExtension).
message TestNestedChildExtensionData {
  optional int32 a = 1;
  optional TestChildExtensionData child = 2;
}

// We have separate messages for testing required fields because it's
// annoying to have to fill in required fields in TestProto in order to
// do anything with it.  Note that we don't need to test every type of
// required filed because the code output is basically identical to
// optional fields for all types.
message TestRequired {
  required int32 a = 1;
  optional int32 dummy2 = 2;
  required int32 b = 3;

  extend TestAllExtensions {
    optional TestRequired single = 1000;
    repeated TestRequired multi  = 1001;
  }

  // Pad the field count to 32 so that we can test that IsInitialized()
  // properly checks multiple elements of has_bits_.
  optional int32 dummy4  =  4;
  optional int32 dummy5  =  5;
  optional int32 dummy6  =  6;
  optional int32 dummy7  =  7;
  optional int32 dummy8  =  8;
  optional int32 dummy9  =  9;
  optional int32 dummy10 = 10;
  optional int32 dummy11 = 11;
  optional int32 dummy12 = 12;
  optional int32 dummy13 = 13;
  optional int32 dummy14 = 14;
  optional int32 dummy15 = 15;
  optional int32 dummy16 = 16;
  optional int32 dummy17 = 17;
  optional int32 dummy18 = 18;
  optional int32 dummy19 = 19;
  optional int32 dummy20 = 20;
  optional int32 dummy21 = 21;
  optional int32 dummy22 = 22;
  optional int32 dummy23 = 23;
  optional int32 dummy24 = 24;
  optional int32 dummy25 = 25;
  optional int32 dummy26 = 26;
  optional int32 dummy27 = 27;
  optional int32 dummy28 = 28;
  optional int32 dummy29 = 29;
  optional int32 dummy30 = 30;
  optional int32 dummy31 = 31;
  optional int32 dummy32 = 32;

  required int32 c = 33;

  // Add an optional child message to make this non-trivial for go/pdlazy.
  optional ForeignMessage optional_foreign = 34;
}

message TestRequiredForeign {
  optional TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  optional int32 dummy = 3;

  // Missing required fields must not affect verification of child messages.
  optional NestedTestAllTypes optional_lazy_message = 4 [lazy = true];
}

message TestRequiredMessage {
  optional TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  required TestRequired required_message = 3;
}

message TestNestedRequiredForeign {
  optional TestNestedRequiredForeign child = 1;
  optional TestRequiredForeign payload = 2;
  optional int32 dummy = 3;
}

// Test that we can use NestedMessage from outside TestAllTypes.
message TestForeignNested {
  optional TestAllTypes.NestedMessage foreign_nested = 1;
}

// TestEmptyMessage is used to test unknown field support.
message TestEmptyMessage {
}

// Like above, but declare all field numbers as potential extensions.  No
// actual extensions should ever be defined for this type.
message TestEmptyMessageWithExtensions {
  extensions 1 to max;
}

// Needed for a Python test.
message TestPickleNestedMessage {
  message NestedMessage {
    optional int32 bb = 1;
    message NestedNestedMessage {
      optional int32 cc = 1;
    }
  }
}

message TestMultipleExtensionRanges {
  extensions 42;
  extensions 4143 to 4243;
  extensions 65536 to max;
}

// Test that really large tag numbers don't break anything.
message TestReallyLargeTagNumber {
  // The largest possible tag number is 2^28 - 1, since the wire format uses
  // three bits to communicate wire type.
  optional int32 a = 1;
  optional int32 bb = 268435455;
}

message TestRecursiveMessage {
  optional TestRecursiveMessage a = 1;
  optional int32 i = 2;
}

// Test that mutual recursion works.
message TestMutualRecursionA {
  message SubMessage {
    optional TestMutualRecursionB b = 1;
  }
  optional TestMutualRecursionB bb = 1;
  optional group SubGroup = 2 {
    optional SubMessage sub_message = 3;  // Needed because of bug in javatest
    optional TestAllTypes not_in_this_scc = 4;
  }
}

message TestMutualRecursionB {
  optional TestMutualRecursionA a = 1;
  optional int32 optional_int32 = 2;
}

message TestIsInitialized {
  message SubMessage {
    optional group SubGroup = 1 {
      required int32 i = 2;
    }
  }
  optional SubMessage sub_message = 1;
}

// Test that groups have disjoint field numbers from their siblings and
// parents.  This is NOT possible in proto1; only google.protobuf.  When attempting
// to compile with proto1, this will emit an error; so we only include it
// in objc.protobuf.tests_proto.
message TestDupFieldNumber {                        // NO_PROTO1
  optional int32 a = 1;                             // NO_PROTO1
  optional group Foo = 2 { optional int32 a = 1; }  // NO_PROTO1
  optional group Bar = 3 { optional int32 a = 1; }  // NO_PROTO1
}                                                   // NO_PROTO1

// Additional messages for testing lazy fields.
message TestEagerMessage {
  optional TestAllTypes sub_message = 1 [lazy=false];
}
message TestLazyMessage {
  optional TestAllTypes sub_message = 1 [lazy=true];
}
message TestEagerMaybeLazy {
  message NestedMessage {
    optional TestPackedTypes packed = 1;
  }
  optional TestAllTypes message_foo = 1;
  optional TestAllTypes message_bar = 2;
  optional NestedMessage message_baz = 3;
}
// Needed for a Python test.
message TestNestedMessageHasBits {
  message NestedMessage {
    repeated int32 nestedmessage_repeated_int32 = 1;
    repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
  }
  optional NestedMessage optional_nested_message = 1;
}


// Test an enum that has multiple values with the same number.
enum TestEnumWithDupValue {
  option allow_alias = true;

  FOO1 = 1;
  BAR1 = 2;
  BAZ = 3;
  FOO2 = 1;
  BAR2 = 2;
}

// Test an enum with large, unordered values.
enum TestSparseEnum {
  SPARSE_A = 123;
  SPARSE_B = 62374;
  SPARSE_C = 12589234;
  SPARSE_D = -15;
  SPARSE_E = -53452;
  SPARSE_F = 0;
  SPARSE_G = 2;
}

// Test message with CamelCase field names.  This violates Protocol Buffer
// standard style.
message TestCamelCaseFieldNames {
  optional int32 PrimitiveField = 1;
  optional string StringField = 2;
  optional ForeignEnum EnumField = 3;
  optional ForeignMessage MessageField = 4;
  optional string StringPieceField = 5 [ctype=STRING_PIECE];
  optional string CordField = 6 [ctype=CORD];

  repeated int32 RepeatedPrimitiveField = 7;
  repeated string RepeatedStringField = 8;
  repeated ForeignEnum RepeatedEnumField = 9;
  repeated ForeignMessage RepeatedMessageField = 10;
  repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
  repeated string RepeatedCordField = 12 [ctype=CORD];
}


// We list fields out of order, to ensure that we're using field number and not
// field index to determine serialization order.
message TestFieldOrderings {
  optional string my_string = 11;
  extensions 2 to 10;
  optional int64 my_int = 1;
  extensions 12 to 100;
  optional float my_float = 101;
  message NestedMessage {
    optional int64 oo = 2;
    // The field name "b" fails to compile in proto1 because it conflicts with
    // a local variable named "b" in one of the generated methods.  Doh.
    // This file needs to compile in proto1 to test backwards-compatibility.
    optional int32 bb = 1;
  }

  optional NestedMessage optional_nested_message  = 200;
}

extend TestFieldOrderings {
  optional string my_extension_string = 50;
  optional int32 my_extension_int = 5;
}

message TestExtensionOrderings1 {
  extend TestFieldOrderings {
    optional TestExtensionOrderings1 test_ext_orderings1 = 13;
  }
  optional string my_string = 1;
}

message TestExtensionOrderings2 {
  extend TestFieldOrderings {
    optional TestExtensionOrderings2 test_ext_orderings2 = 12;
  }
  message TestExtensionOrderings3 {
    extend TestFieldOrderings {
      optional TestExtensionOrderings3 test_ext_orderings3 = 14;
    }
    optional string my_string = 1;
  }
  optional string my_string = 1;
}

message TestExtremeDefaultValues {
  optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
  optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
  optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
  optional  int32 small_int32  = 4 [default = -0x7FFFFFFF];
  optional  int64 small_int64  = 5 [default = -0x7FFFFFFFFFFFFFFF];
  optional  int32 really_small_int32 = 21 [default = -0x80000000];
  optional  int64 really_small_int64 = 22 [default = -0x8000000000000000];

  // The default value here is UTF-8 for "\u1234".  (We could also just type
  // the UTF-8 text directly into this text file rather than escape it, but
  // lots of people use editors that would be confused by this.)
  optional string utf8_string = 6 [default = "\341\210\264"];

  // Tests for single-precision floating-point values.
  optional float zero_float = 7 [default = 0];
  optional float one_float = 8 [default = 1];
  optional float small_float = 9 [default = 1.5];
  optional float negative_one_float = 10 [default = -1];
  optional float negative_float = 11 [default = -1.5];
  // Using exponents
  optional float large_float = 12 [default = 2E8];
  optional float small_negative_float = 13 [default = -8e-28];

  // Text for nonfinite floating-point values.
  optional double inf_double = 14 [default = inf];
  optional double neg_inf_double = 15 [default = -inf];
  optional double nan_double = 16 [default = nan];
  optional float inf_float = 17 [default = inf];
  optional float neg_inf_float = 18 [default = -inf];
  optional float nan_float = 19 [default = nan];

  // Tests for C++ trigraphs.
  // Trigraphs should be escaped in C++ generated files, but they should not be
  // escaped for other languages.
  // Note that in .proto file, "\?" is a valid way to escape ? in string
  // literals.
  optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];

  // String defaults containing the character '\000'
  optional string string_with_zero       = 23 [default = "hel\000lo"];
  optional  bytes bytes_with_zero        = 24 [default = "wor\000ld"];
  optional string string_piece_with_zero = 25 [ctype=STRING_PIECE,
                                               default="ab\000c"];
  optional string cord_with_zero         = 26 [ctype=CORD,
                                               default="12\0003"];
  optional string replacement_string     = 27 [default="${unknown}"];
}

message SparseEnumMessage {
  optional TestSparseEnum sparse_enum = 1;
}

// Test String and Bytes: string is for valid UTF-8 strings
message OneString {
  optional string data = 1;
}

message MoreString {
  repeated string data = 1;
}

message OneBytes {
  optional bytes data = 1;
}

message MoreBytes {
  repeated bytes data = 1;
}

message ManyOptionalString {
  optional string str1 = 1;
  optional string str2 = 2;
  optional string str3 = 3;
  optional string str4 = 4;
  optional string str5 = 5;
  optional string str6 = 6;
  optional string str7 = 7;
  optional string str8 = 8;
  optional string str9 = 9;
  optional string str10 = 10;
  optional string str11 = 11;
  optional string str12 = 12;
  optional string str13 = 13;
  optional string str14 = 14;
  optional string str15 = 15;
  optional string str16 = 16;
  optional string str17 = 17;
  optional string str18 = 18;
  optional string str19 = 19;
  optional string str20 = 20;
  optional string str21 = 21;
  optional string str22 = 22;
  optional string str23 = 23;
  optional string str24 = 24;
  optional string str25 = 25;
  optional string str26 = 26;
  optional string str27 = 27;
  optional string str28 = 28;
  optional string str29 = 29;
  optional string str30 = 30;
  optional string str31 = 31;
  optional string str32 = 32;
}

// Test int32, uint32, int64, uint64, and bool are all compatible
message Int32Message {
  optional int32 data = 1;
}

message Uint32Message {
  optional uint32 data = 1;
}

message Int64Message {
  optional int64 data = 1;
}

message Uint64Message {
  optional uint64 data = 1;
}

message BoolMessage {
  optional bool data = 1;
}

// Test oneofs.
message TestOneof {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    TestAllTypes foo_message = 3;
    group FooGroup = 4 {
      optional int32 a = 5;
      optional string b = 6;
    }
  }
}

message TestOneofBackwardsCompatible {
  optional int32 foo_int = 1;
  optional string foo_string = 2;
  optional TestAllTypes foo_message = 3;
  optional group FooGroup = 4 {
    optional int32 a = 5;
    optional string b = 6;
  }
}

message TestOneof2 {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    string foo_cord = 3 [ctype=CORD];
    string foo_string_piece = 4 [ctype=STRING_PIECE];
    bytes foo_bytes = 5;
    NestedEnum foo_enum = 6;
    NestedMessage foo_message = 7;
    group FooGroup = 8 {
      optional int32 a = 9;
      optional string b = 10;
    }
    NestedMessage foo_lazy_message = 11 [lazy=true];
  }

  oneof bar {
    int32 bar_int = 12 [default = 5];
    string bar_string = 13 [default = "STRING"];
    string bar_cord = 14 [ctype=CORD, default = "CORD"];
    string bar_string_piece = 15 [ctype=STRING_PIECE, default = "SPIECE"];
    bytes bar_bytes = 16 [default = "BYTES"];
    NestedEnum bar_enum = 17 [default = BAR];
    string bar_string_with_empty_default = 20 [default = ""];
    string bar_cord_with_empty_default = 21 [ctype=CORD, default = ""];
    string bar_string_piece_with_empty_default = 22 [ctype=STRING_PIECE, default = ""];
    bytes bar_bytes_with_empty_default = 23 [default = ""];
  }

  optional int32 baz_int = 18;
  optional string baz_string = 19 [default = "BAZ"];

  message NestedMessage {
    optional int64 moo_int = 1;
    repeated int32 corge_int = 2;
  }

  enum NestedEnum {
    FOO = 1;
    BAR = 2;
    BAZ = 3;
  }
}

message TestRequiredOneof {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    NestedMessage foo_message = 3;
  }
  message NestedMessage {
    required double required_double = 1;
  }
}


// Test messages for packed fields

message TestPackedTypes {
  repeated    int32 packed_int32    =  90 [packed = true];
  repeated    int64 packed_int64    =  91 [packed = true];
  repeated   uint32 packed_uint32   =  92 [packed = true];
  repeated   uint64 packed_uint64   =  93 [packed = true];
  repeated   sint32 packed_sint32   =  94 [packed = true];
  repeated   sint64 packed_sint64   =  95 [packed = true];
  repeated  fixed32 packed_fixed32  =  96 [packed = true];
  repeated  fixed64 packed_fixed64  =  97 [packed = true];
  repeated sfixed32 packed_sfixed32 =  98 [packed = true];
  repeated sfixed64 packed_sfixed64 =  99 [packed = true];
  repeated    float packed_float    = 100 [packed = true];
  repeated   double packed_double   = 101 [packed = true];
  repeated     bool packed_bool     = 102 [packed = true];
  repeated ForeignEnum packed_enum  = 103 [packed = true];
}

// A message with the same fields as TestPackedTypes, but without packing. Used
// to test packed <-> unpacked wire compatibility.
message TestUnpackedTypes {
  repeated    int32 unpacked_int32    =  90 [packed = false];
  repeated    int64 unpacked_int64    =  91 [packed = false];
  repeated   uint32 unpacked_uint32   =  92 [packed = false];
  repeated   uint64 unpacked_uint64   =  93 [packed = false];
  repeated   sint32 unpacked_sint32   =  94 [packed = false];
  repeated   sint64 unpacked_sint64   =  95 [packed = false];
  repeated  fixed32 unpacked_fixed32  =  96 [packed = false];
  repeated  fixed64 unpacked_fixed64  =  97 [packed = false];
  repeated sfixed32 unpacked_sfixed32 =  98 [packed = false];
  repeated sfixed64 unpacked_sfixed64 =  99 [packed = false];
  repeated    float unpacked_float    = 100 [packed = false];
  repeated   double unpacked_double   = 101 [packed = false];
  repeated     bool unpacked_bool     = 102 [packed = false];
  repeated ForeignEnum unpacked_enum  = 103 [packed = false];
}

message TestPackedExtensions {
  extensions 1 to max;
}

extend TestPackedExtensions {
  repeated    int32 packed_int32_extension    =  90 [packed = true];
  repeated    int64 packed_int64_extension    =  91 [packed = true];
  repeated   uint32 packed_uint32_extension   =  92 [packed = true];
  repeated   uint64 packed_uint64_extension   =  93 [packed = true];
  repeated   sint32 packed_sint32_extension   =  94 [packed = true];
  repeated   sint64 packed_sint64_extension   =  95 [packed = true];
  repeated  fixed32 packed_fixed32_extension  =  96 [packed = true];
  repeated  fixed64 packed_fixed64_extension  =  97 [packed = true];
  repeated sfixed32 packed_sfixed32_extension =  98 [packed = true];
  repeated sfixed64 packed_sfixed64_extension =  99 [packed = true];
  repeated    float packed_float_extension    = 100 [packed = true];
  repeated   double packed_double_extension   = 101 [packed = true];
  repeated     bool packed_bool_extension     = 102 [packed = true];
  repeated ForeignEnum packed_enum_extension  = 103 [packed = true];
}

message TestUnpackedExtensions {
  extensions 1 to max;
}

extend TestUnpackedExtensions {
  repeated    int32 unpacked_int32_extension    =  90 [packed = false];
  repeated    int64 unpacked_int64_extension    =  91 [packed = false];
  repeated   uint32 unpacked_uint32_extension   =  92 [packed = false];
  repeated   uint64 unpacked_uint64_extension   =  93 [packed = false];
  repeated   sint32 unpacked_sint32_extension   =  94 [packed = false];
  repeated   sint64 unpacked_sint64_extension   =  95 [packed = false];
  repeated  fixed32 unpacked_fixed32_extension  =  96 [packed = false];
  repeated  fixed64 unpacked_fixed64_extension  =  97 [packed = false];
  repeated sfixed32 unpacked_sfixed32_extension =  98 [packed = false];
  repeated sfixed64 unpacked_sfixed64_extension =  99 [packed = false];
  repeated    float unpacked_float_extension    = 100 [packed = false];
  repeated   double unpacked_double_extension   = 101 [packed = false];
  repeated     bool unpacked_bool_extension     = 102 [packed = false];
  repeated ForeignEnum unpacked_enum_extension  = 103 [packed = false];
}

// Used by ExtensionSetTest/DynamicExtensions.  The test actually builds
// a set of extensions to TestAllExtensions dynamically, based on the fields
// of this message type.
message TestDynamicExtensions {
  enum DynamicEnumType {
    DYNAMIC_FOO = 2200;
    DYNAMIC_BAR = 2201;
    DYNAMIC_BAZ = 2202;
  }
  message DynamicMessageType {
    optional int32 dynamic_field = 2100;
  }

  optional fixed32 scalar_extension = 2000;
  optional ForeignEnum enum_extension = 2001;
  optional DynamicEnumType dynamic_enum_extension = 2002;

  optional ForeignMessage message_extension = 2003;
  optional DynamicMessageType dynamic_message_extension = 2004;

  repeated string repeated_extension = 2005;
  repeated sint32 packed_extension = 2006 [packed = true];
}

message TestRepeatedScalarDifferentTagSizes {
  // Parsing repeated fixed size values used to fail. This message needs to be
  // used in order to get a tag of the right size; all of the repeated fields
  // in TestAllTypes didn't trigger the check.
  repeated fixed32 repeated_fixed32 = 12;
  // Check for a varint type, just for good measure.
  repeated int32   repeated_int32   = 13;

  // These have two-byte tags.
  repeated fixed64 repeated_fixed64 = 2046;
  repeated int64   repeated_int64   = 2047;

  // Three byte tags.
  repeated float   repeated_float   = 262142;
  repeated uint64  repeated_uint64  = 262143;
}

// Test that if an optional or required message/group field appears multiple
// times in the input, they need to be merged.
message TestParsingMerge {
  // RepeatedFieldsGenerator defines matching field types as TestParsingMerge,
  // except that all fields are repeated. In the tests, we will serialize the
  // RepeatedFieldsGenerator to bytes, and parse the bytes to TestParsingMerge.
  // Repeated fields in RepeatedFieldsGenerator are expected to be merged into
  // the corresponding required/optional fields in TestParsingMerge.
  message RepeatedFieldsGenerator {
    repeated TestAllTypes field1 = 1;
    repeated TestAllTypes field2 = 2;
    repeated TestAllTypes field3 = 3;
    repeated group Group1 = 10 {
      optional TestAllTypes field1 = 11;
    }
    repeated group Group2 = 20 {
      optional TestAllTypes field1 = 21;
    }
    repeated TestAllTypes ext1 = 1000;
    repeated TestAllTypes ext2 = 1001;
  }
  required TestAllTypes required_all_types = 1;
  optional TestAllTypes optional_all_types = 2;
  repeated TestAllTypes repeated_all_types = 3;
  optional group OptionalGroup = 10 {
    optional TestAllTypes optional_group_all_types = 11;
  }
  repeated group RepeatedGroup = 20 {
    optional TestAllTypes repeated_group_all_types = 21;
  }
  extensions 1000 to max;
  extend TestParsingMerge {
    optional TestAllTypes optional_ext = 1000;
    repeated TestAllTypes repeated_ext = 1001;
  }
}

// Test that the correct exception is thrown by parseFrom in a corner case
// involving merging, extensions, and required fields.
message TestMergeException {
  optional TestAllExtensions all_extensions = 1;
}

message TestCommentInjectionMessage {
  // */ <- This should not close the generated doc comment
  optional string a = 1 [default="*/ <- Neither should this."];
}

// Used to check that the c++ code generator re-orders messages to reduce
// padding.
message TestMessageSize {
  optional bool m1 = 1;
  optional int64 m2 = 2;
  optional bool m3 = 3;
  optional string m4 = 4;
  optional int32 m5 = 5;
  optional int64 m6 = 6;
}


// Test that RPC services work.
message FooRequest  {}
message FooResponse {}

message FooClientMessage {}
message FooServerMessage{}

service TestService {
  rpc Foo(FooRequest) returns (FooResponse);
  rpc Bar(BarRequest) returns (BarResponse);
}


message BarRequest  {}
message BarResponse {}

message TestJsonName {
  optional int32 field_name1 = 1;
  optional int32 fieldName2 = 2;
  optional int32 FieldName3 = 3;
  optional int32 _field_name4 = 4;
  optional int32 FIELD_NAME5 = 5;
  optional int32 field_name6 = 6 [json_name = "@type"];
  optional int32 fieldname7 = 7;
}

message TestHugeFieldNumbers {
  optional int32 optional_int32 = 536870000;
  optional int32 fixed_32 = 536870001;
  repeated int32 repeated_int32 = 536870002 [packed = false];
  repeated int32 packed_int32 = 536870003 [packed = true];

  optional ForeignEnum optional_enum = 536870004;
  optional string optional_string = 536870005;
  optional bytes optional_bytes = 536870006;
  optional ForeignMessage optional_message = 536870007;

  optional group OptionalGroup = 536870008 {
    optional int32 group_a = 536870009;
  }

  map<string, string> string_string_map = 536870010;

  oneof oneof_field {
    uint32 oneof_uint32 = 536870011;
    TestAllTypes oneof_test_all_types = 536870012;
    string oneof_string = 536870013;
    bytes oneof_bytes = 536870014;
  }

  extensions 530000000 to 536869999 [declaration = {
    number: 536860000
    full_name: ".objc.protobuf.tests.test_all_types"
    type: ".objc.protobuf.tests.TestAllTypes"
  }];
}

extend TestHugeFieldNumbers {
  optional TestAllTypes test_all_types = 536860000;
}

message TestExtensionInsideTable {
  optional int32 field1 = 1;
  optional int32 field2 = 2;
  optional int32 field3 = 3;
  optional int32 field4 = 4;
  extensions 5 to 5;
  optional int32 field6 = 6;
  optional int32 field7 = 7;
  optional int32 field8 = 8;
  optional int32 field9 = 9;
  optional int32 field10 = 10;
}

extend TestExtensionInsideTable {
  optional int32 test_extension_inside_table_extension = 5;
}

// NOTE: Intentionally nested to mirror go/glep.
message TestNestedGroupExtensionOuter {
  optional group Layer1OptionalGroup = 1 {
    repeated group Layer2RepeatedGroup = 2 {
      extensions 3
        // NOTE: extension metadata is not supported due to targets such as
        // `//google/protobuf_legacy_opensource/src:shell_scripts_test`,
        // eee https://screenshot.googleplex.com/Axz2QD8nxjdpyFF
        //[metadata = {
        // NOTE: can't write type there due to some clever build gen code at
        // http://google3/google/protobuf/BUILD;l=1247;rcl=411090862
        // type: "objc.protobuf.tests.TestNestedGroupExtensionInnerExtension",
        // name: "inner",
        // }]
        ;
      optional string another_field = 6;
    }
    repeated group Layer2AnotherOptionalRepeatedGroup = 4 {
      optional string but_why_tho = 5;
    }
  }
}

message TestNestedGroupExtensionInnerExtension {
  optional string inner_name= 1;
}

extend TestNestedGroupExtensionOuter.Layer1OptionalGroup.Layer2RepeatedGroup {
  optional TestNestedGroupExtensionInnerExtension inner = 3;
}

enum VeryLargeEnum {
  ENUM_LABEL_DEFAULT = 0;
  ENUM_LABEL_1 = 1;
  ENUM_LABEL_2 = 2;
  ENUM_LABEL_3 = 3;
  ENUM_LABEL_4 = 4;
  ENUM_LABEL_5 = 5;
  ENUM_LABEL_6 = 6;
  ENUM_LABEL_7 = 7;
  ENUM_LABEL_8 = 8;
  ENUM_LABEL_9 = 9;
  ENUM_LABEL_10 = 10;
  ENUM_LABEL_11 = 11;
  ENUM_LABEL_12 = 12;
  ENUM_LABEL_13 = 13;
  ENUM_LABEL_14 = 14;
  ENUM_LABEL_15 = 15;
  ENUM_LABEL_16 = 16;
  ENUM_LABEL_17 = 17;
  ENUM_LABEL_18 = 18;
  ENUM_LABEL_19 = 19;
  ENUM_LABEL_20 = 20;
  ENUM_LABEL_21 = 21;
  ENUM_LABEL_22 = 22;
  ENUM_LABEL_23 = 23;
  ENUM_LABEL_24 = 24;
  ENUM_LABEL_25 = 25;
  ENUM_LABEL_26 = 26;
  ENUM_LABEL_27 = 27;
  ENUM_LABEL_28 = 28;
  ENUM_LABEL_29 = 29;
  ENUM_LABEL_30 = 30;
  ENUM_LABEL_31 = 31;
  ENUM_LABEL_32 = 32;
  ENUM_LABEL_33 = 33;
  ENUM_LABEL_34 = 34;
  ENUM_LABEL_35 = 35;
  ENUM_LABEL_36 = 36;
  ENUM_LABEL_37 = 37;
  ENUM_LABEL_38 = 38;
  ENUM_LABEL_39 = 39;
  ENUM_LABEL_40 = 40;
  ENUM_LABEL_41 = 41;
  ENUM_LABEL_42 = 42;
  ENUM_LABEL_43 = 43;
  ENUM_LABEL_44 = 44;
  ENUM_LABEL_45 = 45;
  ENUM_LABEL_46 = 46;
  ENUM_LABEL_47 = 47;
  ENUM_LABEL_48 = 48;
  ENUM_LABEL_49 = 49;
  ENUM_LABEL_50 = 50;
  ENUM_LABEL_51 = 51;
  ENUM_LABEL_52 = 52;
  ENUM_LABEL_53 = 53;
  ENUM_LABEL_54 = 54;
  ENUM_LABEL_55 = 55;
  ENUM_LABEL_56 = 56;
  ENUM_LABEL_57 = 57;
  ENUM_LABEL_58 = 58;
  ENUM_LABEL_59 = 59;
  ENUM_LABEL_60 = 60;
  ENUM_LABEL_61 = 61;
  ENUM_LABEL_62 = 62;
  ENUM_LABEL_63 = 63;
  ENUM_LABEL_64 = 64;
  ENUM_LABEL_65 = 65;
  ENUM_LABEL_66 = 66;
  ENUM_LABEL_67 = 67;
  ENUM_LABEL_68 = 68;
  ENUM_LABEL_69 = 69;
  ENUM_LABEL_70 = 70;
  ENUM_LABEL_71 = 71;
  ENUM_LABEL_72 = 72;
  ENUM_LABEL_73 = 73;
  ENUM_LABEL_74 = 74;
  ENUM_LABEL_75 = 75;
  ENUM_LABEL_76 = 76;
  ENUM_LABEL_77 = 77;
  ENUM_LABEL_78 = 78;
  ENUM_LABEL_79 = 79;
  ENUM_LABEL_80 = 80;
  ENUM_LABEL_81 = 81;
  ENUM_LABEL_82 = 82;
  ENUM_LABEL_83 = 83;
  ENUM_LABEL_84 = 84;
  ENUM_LABEL_85 = 85;
  ENUM_LABEL_86 = 86;
  ENUM_LABEL_87 = 87;
  ENUM_LABEL_88 = 88;
  ENUM_LABEL_89 = 89;
  ENUM_LABEL_90 = 90;
  ENUM_LABEL_91 = 91;
  ENUM_LABEL_92 = 92;
  ENUM_LABEL_93 = 93;
  ENUM_LABEL_94 = 94;
  ENUM_LABEL_95 = 95;
  ENUM_LABEL_96 = 96;
  ENUM_LABEL_97 = 97;
  ENUM_LABEL_98 = 98;
  ENUM_LABEL_99 = 99;
  ENUM_LABEL_100 = 100;
};

message TestExtensionRangeSerialize {
  optional int32 foo_one = 1;

  extensions 2 to 2;
  extensions 3 to 4;

  optional int32 foo_two = 6;
  optional int32 foo_three = 7;

  extensions 9 to 10;

  optional int32 foo_four = 13;

  extensions 15 to 15;
  extensions 17 to 17;
  extensions 19 to 19;

  extend TestExtensionRangeSerialize {
    optional int32 bar_one = 2;
    optional int32 bar_two = 4;

    optional int32 bar_three = 10;

    optional int32 bar_four = 15;
    optional int32 bar_five = 19;
  }
}

message TestVerifyInt32Simple {
    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;
}

message TestVerifyInt32 {
    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyMostlyInt32 {
    optional int64 optional_int64_30 = 30;

    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_3 = 3;
    optional int32 optional_int32_4 = 4;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyMostlyInt32BigFieldNumber {
    optional int64 optional_int64_30 = 30;
    optional int32 optional_int32_300 = 300;

    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_3 = 3;
    optional int32 optional_int32_4 = 4;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyUint32Simple {
    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;
}

message TestVerifyUint32 {
    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyOneUint32 {
    optional uint32 optional_uint32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyOneInt32BigFieldNumber {
    optional int32 optional_int32_65 = 65;

    optional int64 optional_int64_1 = 1;
    optional int64 optional_int64_2 = 2;
    optional int64 optional_int64_63 = 63;
    optional int64 optional_int64_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyInt32BigFieldNumber {
    optional int32 optional_int32_1000 = 1000;
    optional int32 optional_int32_65 = 65;

    optional int32 optional_int32_1 = 1;
    optional int32 optional_int32_2 = 2;
    optional int32 optional_int32_63 = 63;
    optional int32 optional_int32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyUint32BigFieldNumber {
    optional uint32 optional_uint32_1000 = 1000;
    optional uint32 optional_uint32_65 = 65;

    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;

    optional TestAllTypes optional_all_types = 9;
    repeated TestAllTypes repeated_all_types = 10;
}

message TestVerifyBigFieldNumberUint32 {
  message Nested {
    optional uint32 optional_uint32_5000 = 5000;
    optional uint32 optional_uint32_1000 = 1000;
    optional uint32 optional_uint32_66 = 66;
    optional uint32 optional_uint32_65 = 65;

    optional uint32 optional_uint32_1 = 1;
    optional uint32 optional_uint32_2 = 2;
    optional uint32 optional_uint32_63 = 63;
    optional uint32 optional_uint32_64 = 64;

    optional Nested optional_nested = 9;
    repeated Nested repeated_nested = 10;
  }
  optional Nested optional_nested = 1;
}


// This message contains different kind of enums to exercise the different
// parsers in table-driven.
message EnumParseTester {
  enum SeqSmall0 {
    SEQ_SMALL_0_DEFAULT = 0;
    SEQ_SMALL_0_1 = 1;
    SEQ_SMALL_0_2 = 2;
  };
  optional SeqSmall0 optional_seq_small_0_lowfield = 1;
  optional SeqSmall0 optional_seq_small_0_midfield = 1001;
  optional SeqSmall0 optional_seq_small_0_hifield = 1000001;
  repeated SeqSmall0 repeated_seq_small_0_lowfield = 2;
  repeated SeqSmall0 repeated_seq_small_0_midfield = 1002;
  repeated SeqSmall0 repeated_seq_small_0_hifield = 1000002;
  repeated SeqSmall0 packed_seq_small_0_lowfield = 3 [packed = true];
  repeated SeqSmall0 packed_seq_small_0_midfield = 1003 [packed = true];
  repeated SeqSmall0 packed_seq_small_0_hifield = 1000003 [packed = true];

  enum SeqSmall1 {
    SEQ_SMALL_1_DEFAULT = 1;
    SEQ_SMALL_1_2 = 2;
    SEQ_SMALL_1_3 = 3;
  };
  optional SeqSmall1 optional_seq_small_1_lowfield = 4;
  optional SeqSmall1 optional_seq_small_1_midfield = 1004;
  optional SeqSmall1 optional_seq_small_1_hifield = 1000004;
  repeated SeqSmall1 repeated_seq_small_1_lowfield = 5;
  repeated SeqSmall1 repeated_seq_small_1_midfield = 1005;
  repeated SeqSmall1 repeated_seq_small_1_hifield = 1000005;
  repeated SeqSmall1 packed_seq_small_1_lowfield = 6 [packed = true];
  repeated SeqSmall1 packed_seq_small_1_midfield = 1006 [packed = true];
  repeated SeqSmall1 packed_seq_small_1_hifield = 1000006 [packed = true];

  enum SeqLarge {
    SEQ_LARGE_DEFAULT = -1;
    SEQ_LARGE_0 = 0;
    SEQ_LARGE_1 = 1;
    SEQ_LARGE_2 = 2;
    SEQ_LARGE_3 = 3;
    SEQ_LARGE_4 = 4;
    SEQ_LARGE_5 = 5;
    SEQ_LARGE_6 = 6;
    SEQ_LARGE_7 = 7;
    SEQ_LARGE_8 = 8;
    SEQ_LARGE_9 = 9;
    SEQ_LARGE_10 = 10;
    SEQ_LARGE_11 = 11;
    SEQ_LARGE_12 = 12;
    SEQ_LARGE_13 = 13;
    SEQ_LARGE_14 = 14;
    SEQ_LARGE_15 = 15;
    SEQ_LARGE_16 = 16;
    SEQ_LARGE_17 = 17;
    SEQ_LARGE_18 = 18;
    SEQ_LARGE_19 = 19;
    SEQ_LARGE_20 = 20;
    SEQ_LARGE_21 = 21;
    SEQ_LARGE_22 = 22;
    SEQ_LARGE_23 = 23;
    SEQ_LARGE_24 = 24;
    SEQ_LARGE_25 = 25;
    SEQ_LARGE_26 = 26;
    SEQ_LARGE_27 = 27;
    SEQ_LARGE_28 = 28;
    SEQ_LARGE_29 = 29;
    SEQ_LARGE_30 = 30;
    SEQ_LARGE_31 = 31;
    SEQ_LARGE_32 = 32;
    SEQ_LARGE_33 = 33;
  };
  optional SeqLarge optional_seq_large_lowfield = 7;
  optional SeqLarge optional_seq_large_midfield = 1007;
  optional SeqLarge optional_seq_large_hifield = 1000007;
  repeated SeqLarge repeated_seq_large_lowfield = 8;
  repeated SeqLarge repeated_seq_large_midfield = 1008;
  repeated SeqLarge repeated_seq_large_hifield = 1000008;
  repeated SeqLarge packed_seq_large_lowfield = 9 [packed = true];
  repeated SeqLarge packed_seq_large_midfield = 1009 [packed = true];
  repeated SeqLarge packed_seq_large_hifield = 1000009 [packed = true];

  enum Arbitrary {
    ARBITRARY_DEFAULT = -123123;
    ARBITRARY_1 = -123;
    ARBITRARY_2 = 213;
    ARBITRARY_3 = 213213;
    ARBITRARY_MIN = -2147483648;
    ARBITRARY_MAX = 2147483647;
  };
  optional Arbitrary optional_arbitrary_lowfield = 10;
  optional Arbitrary optional_arbitrary_midfield = 1010;
  optional Arbitrary optional_arbitrary_hifield = 1000010;
  repeated Arbitrary repeated_arbitrary_lowfield = 11;
  repeated Arbitrary repeated_arbitrary_midfield = 1011;
  repeated Arbitrary repeated_arbitrary_hifield = 1000011;
  repeated Arbitrary packed_arbitrary_lowfield = 12 [packed = true];
  repeated Arbitrary packed_arbitrary_midfield = 1012 [packed = true];
  repeated Arbitrary packed_arbitrary_hifield = 1000012 [packed = true];

  // An arbitrary field we can append to to break the runs of repeated fields.
  optional int32 other_field = 99;
};

// This message contains different kind of bool fields to exercise the different
// parsers in table-drived.
message BoolParseTester {
  optional bool optional_bool_lowfield = 1;
  optional bool optional_bool_midfield = 1001;
  optional bool optional_bool_hifield = 1000001;
  repeated bool repeated_bool_lowfield = 2;
  repeated bool repeated_bool_midfield = 1002;
  repeated bool repeated_bool_hifield = 1000002;
  repeated bool packed_bool_lowfield = 3 [packed = true];
  repeated bool packed_bool_midfield = 1003 [packed = true];
  repeated bool packed_bool_hifield = 1000003 [packed = true];

  // An arbitrary field we can append to to break the runs of repeated fields.
  optional int32 other_field = 99;
};

