// 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

// Author: kenton@google.com (Kenton Varda)
//  Based on original Protocol Buffers design by
//  Sanjay Ghemawat, Jeff Dean, and others.
//
// A proto file we will use for unit testing. See comments in
// edition_message_unittest.cc before adding new features.
//
// LINT: ALLOW_GROUPS, LEGACY_NAMES

edition = "2023";

import "google/protobuf/cpp_features.proto";

option features.field_presence = EXPLICIT;
option features.enum_type = CLOSED;
option features.(pb.cpp).string_type = VIEW;

// Some generic_services option(s) added automatically.
// See:  http://go/proto2-generic-services-default
option cc_generic_services = true;     // auto-added
option java_generic_services = true;   // auto-added
option py_generic_services = true;     // auto-added
option cc_enable_arenas = true;

import "google/protobuf/unittest_import.proto";

// We don't put this in a package within proto2 because we need to make sure
// that the generated code doesn't depend on being in the proto2 namespace.
// In test_util.h we do "using namespace unittest = edition_unittest".
package edition_unittest;

// Protos optimized for SPEED use a strict superset of the generated code
// of equivalent ones optimized for CODE_SIZE, so we should optimize all our
// tests for speed unless explicitly testing code size optimization.
option optimize_for = SPEED;

// 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.
    int32 bb = 1;
  }

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

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

  message OptionalGroup {
    int32 a = 17;
  }
  OptionalGroup optionalgroup = 16
      [features.message_encoding = DELIMITED];

  NestedMessage                        optional_nested_message  = 18;
  ForeignMessage                       optional_foreign_message = 19;
  protobuf_unittest_import.ImportMessage optional_import_message  = 20;

  NestedEnum                           optional_nested_enum     = 21;
  ForeignEnum                          optional_foreign_enum    = 22;
  protobuf_unittest_import.ImportEnum    optional_import_enum     = 23;

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

  // Defined in unittest_import_public.proto
  protobuf_unittest_import.PublicImportMessage
      optional_public_import_message = 26;

  NestedMessage optional_lazy_message = 27 [lazy=true];
  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;

  message RepeatedGroup {
    int32 a = 47;
  }
  repeated RepeatedGroup repeatedgroup = 46
      [features.message_encoding = DELIMITED];

  repeated NestedMessage                        repeated_nested_message  = 48;
  repeated ForeignMessage                       repeated_foreign_message = 49;
  repeated protobuf_unittest_import.ImportMessage repeated_import_message  = 50;

  repeated NestedEnum                           repeated_nested_enum     = 51;
  repeated ForeignEnum                          repeated_foreign_enum    = 52;
  repeated protobuf_unittest_import.ImportEnum    repeated_import_enum     = 53;

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

  repeated NestedMessage repeated_lazy_message = 57 ;

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

  NestedEnum  default_nested_enum  = 81 [default = BAR        ];
  ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
  protobuf_unittest_import.ImportEnum
      default_import_enum = 83 [default = IMPORT_BAR];

  string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
  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;
    string oneof_cord = 115 [ctype=CORD];
    string oneof_string_piece = 116 [ctype=STRING_PIECE];
    NestedMessage oneof_lazy_nested_message = 117 [lazy=true];
  }
}

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

message TestDeprecatedFields {
  int32 deprecated_int32 = 1 [deprecated=true];
  repeated string deprecated_repeated_string = 4 [deprecated=true];
  TestAllTypes.NestedMessage deprecated_message = 3 [deprecated=true];
  oneof oneof_fields {
    int32 deprecated_int32_in_oneof = 2 [deprecated=true];
  }
  TestDeprecatedFields nested = 5;
}

message TestDeprecatedMessage {
  option deprecated = true;
}

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

enum ForeignEnum {
  FOREIGN_FOO = 4;
  FOREIGN_BAR = 5;
  FOREIGN_BAZ = 6;
  FOREIGN_BAX = 32;  // (1 << 32) to generate a 64b bitmask would be incorrect.
}

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;
}

  message OptionalGroup_extension {
    int32 a = 17;
  }

  message RepeatedGroup_extension {
    int32 a = 47;
  }

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

  OptionalGroup_extension optionalgroup_extension = 16
      [features.message_encoding = DELIMITED];

  TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  ForeignMessage optional_foreign_message_extension = 19;
  protobuf_unittest_import.ImportMessage
    optional_import_message_extension = 20;

  TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
  ForeignEnum optional_foreign_enum_extension = 22;
  protobuf_unittest_import.ImportEnum
    optional_import_enum_extension = 23;

  string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
  // TODO: ctype=CORD is not supported for extension. Add
  // ctype=CORD option back after it is supported.
  string optional_cord_extension = 25;

  protobuf_unittest_import.PublicImportMessage
    optional_public_import_message_extension = 26;

  TestAllTypes.NestedMessage
    optional_lazy_message_extension = 27 [lazy=true];
  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 RepeatedGroup_extension repeatedgroup_extension = 46
      [features.message_encoding = DELIMITED];

  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  repeated ForeignMessage repeated_foreign_message_extension = 49;
  repeated protobuf_unittest_import.ImportMessage
    repeated_import_message_extension = 50;

  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
  repeated ForeignEnum repeated_foreign_enum_extension = 52;
  repeated protobuf_unittest_import.ImportEnum
    repeated_import_enum_extension = 53;

  repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
  // TODO: ctype=CORD is not supported for extension. Add
  // ctype=CORD option back after it is supported.
  repeated string repeated_cord_extension = 55;

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

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

  TestAllTypes.NestedEnum
    default_nested_enum_extension = 81 [default = BAR];
  ForeignEnum
    default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
  protobuf_unittest_import.ImportEnum
    default_import_enum_extension = 83 [default = IMPORT_BAR];

  string default_string_piece_extension = 84
      [ctype=STRING_PIECE, default="abc"];
  // TODO: ctype=CORD is not supported for extension. Add
  // ctype=CORD option back after it is supported.
  string default_cord_extension = 85 [default="123"];

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

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

message TestGroup {
  message OptionalGroup {
    int32 a = 17;
    int32 zz = 89;  // fast table size must be at least 16, for this
                    // field to be parsed by the fast parser, since
                    // 89 - 17 = 72 is a multiple of 8.
  }
  OptionalGroup optionalgroup = 16 [features.message_encoding = DELIMITED];
  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.
    string test = 1002 [default="test"];
    // Used to test if generated extension name is correct when there are
    // underscores.
    string nested_string_extension = 1003;
  }

    message OptionalGroup_extension {
      int32 a = 17;
    }
  extend TestGroupExtension {
    OptionalGroup_extension optionalgroup_extension = 16
        [features.message_encoding = DELIMITED];
    ForeignEnum optional_foreign_enum_extension = 22;
  }
}

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

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

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

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

// Required and closed enum fields are considered unknown fields if the value is
// not valid. We need to make sure it functions as expected.
message TestRequiredEnum {
  ForeignEnum required_enum = 1 [features.field_presence = LEGACY_REQUIRED];

  // A dummy optional field.
  int32 a = 2;
}

// TestRequiredEnum + using enum values that won't fit to 64 bitmask.
message TestRequiredEnumNoMask {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 2;
    BAR = 100;
    BAZ = -1;  // Intentionally negative.
  }

  NestedEnum required_enum = 1 [features.field_presence = LEGACY_REQUIRED];

  // A dummy optional field.
  int32 a = 2;
}

message TestRequiredEnumMulti {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 1;
    BAR = 2;
    BAZ = 100;
  }

  // Intentionally placed in descending field number to force sorting in closed
  // enum verification.
  NestedEnum required_enum_4 = 4 [features.field_presence = LEGACY_REQUIRED];
  int32 a_3 = 3;
  NestedEnum required_enum_2 = 2 [features.field_presence = LEGACY_REQUIRED];
  ForeignEnum required_enum_1 = 1 [features.field_presence = LEGACY_REQUIRED];
}

message TestRequiredNoMaskMulti {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 1;
    BAR = 2;
    BAZ = 100;
  }

  // Intentionally placed in descending field number to force sorting in closed
  // enum verification. Also, using large field numbers to use tag only
  // matching for fields.
  fixed32 required_fixed32_80 = 80 [features.field_presence = LEGACY_REQUIRED];
  fixed32 required_fixed32_70 = 70 [features.field_presence = LEGACY_REQUIRED];

  NestedEnum required_enum_64 = 64 [features.field_presence = LEGACY_REQUIRED];
  NestedEnum required_enum_4 = 4 [features.field_presence = LEGACY_REQUIRED];
  int32 a_3 = 3;
  NestedEnum required_enum_2 = 2 [features.field_presence = LEGACY_REQUIRED];
  ForeignEnum required_enum_1 = 1 [features.field_presence = LEGACY_REQUIRED];
}

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

  extend TestAllExtensions {
    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_.
  int32 dummy4  =  4;
  int32 dummy5  =  5;
  int32 dummy6  =  6;
  int32 dummy7  =  7;
  int32 dummy8  =  8;
  int32 dummy9  =  9;
  int32 dummy10 = 10;
  int32 dummy11 = 11;
  int32 dummy12 = 12;
  int32 dummy13 = 13;
  int32 dummy14 = 14;
  int32 dummy15 = 15;
  int32 dummy16 = 16;
  int32 dummy17 = 17;
  int32 dummy18 = 18;
  int32 dummy19 = 19;
  int32 dummy20 = 20;
  int32 dummy21 = 21;
  int32 dummy22 = 22;
  int32 dummy23 = 23;
  int32 dummy24 = 24;
  int32 dummy25 = 25;
  int32 dummy26 = 26;
  int32 dummy27 = 27;
  int32 dummy28 = 28;
  int32 dummy29 = 29;
  int32 dummy30 = 30;
  int32 dummy31 = 31;
  int32 dummy32 = 32;

  int32 c = 33 [features.field_presence = LEGACY_REQUIRED];

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

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

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

message TestRequiredMessage {
  TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  TestRequired required_message = 3 [features.field_presence = LEGACY_REQUIRED];
}

message TestNestedRequiredForeign {
  TestNestedRequiredForeign child = 1;
  TestRequiredForeign payload = 2;
  int32 dummy = 3;
  // optional message to test closed enum.
  TestRequiredEnum required_enum = 5;
  TestRequiredEnumNoMask required_enum_no_mask = 6;
  TestRequiredEnumMulti required_enum_multi = 7;
  TestRequiredNoMaskMulti required_no_mask = 9;
}

// Test that we can use NestedMessage from outside TestAllTypes.
message TestForeignNested {
  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 {
    int32 bb = 1;
    message NestedNestedMessage {
      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.
  int32 a = 1;
  int32 bb = 268435455;
}

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

// Test that mutual recursion works.
message TestMutualRecursionA {
  message SubMessage {
    TestMutualRecursionB b = 1;
  }
  TestMutualRecursionB bb = 1;
  message SubGroup {
    SubMessage sub_message = 3;  // Needed because of bug in javatest
    TestAllTypes not_in_this_scc = 4;
  }
  SubGroup subgroup = 2 [features.message_encoding = DELIMITED];
  message SubGroupR {
    TestAllTypes payload = 6;
  }
  repeated SubGroupR subgroupr = 5 [features.message_encoding = DELIMITED];
}

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

message TestIsInitialized {
  message SubMessage {
    message SubGroup {
      int32 i = 2 [features.field_presence = LEGACY_REQUIRED];
    }
    SubGroup subgroup = 1 [features.message_encoding = DELIMITED];
  }
  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 protobuf_unittest_proto.
message TestDupFieldNumber {                        // NO_PROTO1
  int32 a = 1;                             // NO_PROTO1
  message Foo { int32 a = 1; }  // NO_PROTO1
  message Bar { int32 a = 1; }  // NO_PROTO1
  Foo foo = 2 [features.message_encoding = DELIMITED];
  Bar bar = 3 [features.message_encoding = DELIMITED];
}                                                   // NO_PROTO1

// Additional messages for testing lazy fields.
message TestEagerMessage {
  TestAllTypes sub_message = 1 [lazy=false];
}
message TestLazyMessage {
  TestAllTypes sub_message = 1 [lazy=true];
}
message TestLazyMessageRepeated {
  repeated TestLazyMessage repeated_message = 1;
}
message TestEagerMaybeLazy {
  message NestedMessage {
    TestPackedTypes packed = 1;
  }
  TestAllTypes message_foo = 1;
  TestAllTypes message_bar = 2;
  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;
  }
  NestedMessage optional_nested_message = 1;
}


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

  DUP_UNKNOWN1 = 0;
  DUP_FOO1 = 1;
  DUP_BAR1 = 2;
  DUP_BAZ = 3;
  DUP_UNKNOWN2 = 0;
  DUP_FOO2 = 1;
  DUP_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 {
  int32 PrimitiveField = 1;
  string StringField = 2;
  ForeignEnum EnumField = 3;
  ForeignMessage MessageField = 4;
  string StringPieceField = 5 [ctype=STRING_PIECE];
  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 {
  string my_string = 11;
  extensions 2 to 10;
  int64 my_int = 1;
  extensions 12 to 100;
  float my_float = 101;
  message NestedMessage {
    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.
    int32 bb = 1;
  }

  NestedMessage optional_nested_message  = 200;
}

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

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

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

message TestExtremeDefaultValues {
  bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
  uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
  uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
   int32 small_int32  = 4 [default = -0x7FFFFFFF];
   int64 small_int64  = 5 [default = -0x7FFFFFFFFFFFFFFF];
   int32 really_small_int32 = 21 [default = -0x80000000];
   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.)
  string utf8_string = 6 [default = "\341\210\264"];

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

  // Text for nonfinite floating-point values.
  double inf_double = 14 [default = inf];
  double neg_inf_double = 15 [default = -inf];
  double nan_double = 16 [default = nan];
  float inf_float = 17 [default = inf];
  float neg_inf_float = 18 [default = -inf];
  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.
  string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];

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

message SparseEnumMessage {
  TestSparseEnum sparse_enum = 1;
}

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

message MoreString {
  repeated string data = 1;
}

message OneBytes {
  bytes data = 1;
}

message MoreBytes {
  repeated bytes data = 1;
}

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

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

message Uint32Message {
  uint32 data = 1;
}

message Int64Message {
  int64 data = 1;
}

message Uint64Message {
  uint64 data = 1;
}

message BoolMessage {
  bool data = 1;
}

// Test oneofs.
message TestOneof {
    message FooGroup {
      int32 a = 5;
      string b = 6;
    }
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    TestAllTypes foo_message = 3;
    FooGroup foogroup= 4 [features.message_encoding = DELIMITED];
  }
}

message TestOneofBackwardsCompatible {
  int32 foo_int = 1;
  string foo_string = 2;
  TestAllTypes foo_message = 3;
  message FooGroup {
    int32 a = 5;
    string b = 6;
  }
    FooGroup foogroup= 4 [features.message_encoding = DELIMITED];
}

message TestOneof2 {
    message FooGroup {
      int32 a = 9;
      string b = 10;
    }
  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;
    FooGroup foogroup = 8 [features.message_encoding = DELIMITED];
    NestedMessage foo_lazy_message = 11 [lazy=true];
    bytes foo_bytes_cord = 30 [ctype=CORD];
  }

  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 = ""];
  }

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

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

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

message TestRequiredOneof {
  oneof foo {
    int32 foo_int = 1;
    string foo_string = 2;
    NestedMessage foo_message = 3;
    NestedMessage foo_lazy_message = 4 [lazy = true];
  }
  message NestedMessage {
    double required_double = 1 [features.field_presence = LEGACY_REQUIRED];
  }
}

// Test messages for packed fields

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

// 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 [features.repeated_field_encoding = EXPANDED];
  repeated    int64 unpacked_int64    =  91 [features.repeated_field_encoding = EXPANDED];
  repeated   uint32 unpacked_uint32   =  92 [features.repeated_field_encoding = EXPANDED];
  repeated   uint64 unpacked_uint64   =  93 [features.repeated_field_encoding = EXPANDED];
  repeated   sint32 unpacked_sint32   =  94 [features.repeated_field_encoding = EXPANDED];
  repeated   sint64 unpacked_sint64   =  95 [features.repeated_field_encoding = EXPANDED];
  repeated  fixed32 unpacked_fixed32  =  96 [features.repeated_field_encoding = EXPANDED];
  repeated  fixed64 unpacked_fixed64  =  97 [features.repeated_field_encoding = EXPANDED];
  repeated sfixed32 unpacked_sfixed32 =  98 [features.repeated_field_encoding = EXPANDED];
  repeated sfixed64 unpacked_sfixed64 =  99 [features.repeated_field_encoding = EXPANDED];
  repeated    float unpacked_float    = 100 [features.repeated_field_encoding = EXPANDED];
  repeated   double unpacked_double   = 101 [features.repeated_field_encoding = EXPANDED];
  repeated     bool unpacked_bool     = 102 [features.repeated_field_encoding = EXPANDED];
  repeated ForeignEnum unpacked_enum  = 103 [features.repeated_field_encoding = EXPANDED];
}

message TestPackedExtensions {
  extensions 1 to max;
}

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

message TestUnpackedExtensions {
  extensions 1 to max;
}

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

// 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_UNKNOWN = 0;
    DYNAMIC_FOO = 2200;
    DYNAMIC_BAR = 2201;
    DYNAMIC_BAZ = 2202;
  }
  message DynamicMessageType {
    int32 dynamic_field = 2100;
  }

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

  ForeignMessage message_extension = 2003;
  DynamicMessageType dynamic_message_extension = 2004;

  repeated string repeated_extension = 2005;
  repeated sint32 packed_extension = 2006 [features.repeated_field_encoding = PACKED];
}

message TestRepeatedString {
  repeated string repeated_string1 = 1;
  repeated string repeated_string2 = 2;

  repeated bytes repeated_bytes11 = 11;
  repeated bytes repeated_bytes12 = 12;
}

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 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;
    message Group1 {
      TestAllTypes field1 = 11;
    }
    repeated Group1 group1= 10 [features.message_encoding = DELIMITED];
    message Group2 {
      TestAllTypes field1 = 21;
    }
    repeated Group2 group2= 20 [features.message_encoding = DELIMITED];
    repeated TestAllTypes ext1 = 1000;
    repeated TestAllTypes ext2 = 1001;
  }
  TestAllTypes required_all_types = 1 [features.field_presence = LEGACY_REQUIRED];
  TestAllTypes optional_all_types = 2;
  repeated TestAllTypes repeated_all_types = 3;
  message OptionalGroup {
    TestAllTypes optional_group_all_types = 11;
  }
  OptionalGroup optionalgroup= 10 [features.message_encoding = DELIMITED];
  message RepeatedGroup {
    TestAllTypes repeated_group_all_types = 21;
  }
  repeated RepeatedGroup repeatedgroup= 20 [features.message_encoding = DELIMITED];
  extensions 1000 to max;
  extend TestParsingMerge {
    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 fields.
message TestMergeException {
  TestAllExtensions all_extensions = 1;
}

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

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

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

message FooClientMessage {}
message FooServerMessage{}

message BarRequest  {}
message BarResponse {}

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

message TestHugeFieldNumbers {
  int32 optional_int32 = 536870000;
  int32 fixed_32 = 536870001;
  repeated int32 repeated_int32 = 536870002 [features.repeated_field_encoding = EXPANDED];
  repeated int32 packed_int32 = 536870003 [features.repeated_field_encoding = PACKED];

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

  message OptionalGroup {
    int32 group_a = 536870009;
  }
  OptionalGroup optionalgroup = 536870008 [features.message_encoding = DELIMITED];

  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 536860000 to 536869999 [declaration = {
    number: 536860000
    full_name: ".edition_unittest.test_all_types"
    type: ".edition_unittest.TestAllTypes"
  }];
}

extend TestHugeFieldNumbers {
  TestAllTypes test_all_types = 536860000;
}

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

extend TestExtensionInsideTable {
  int32 test_extension_inside_table_extension = 5;
}

// NOTE: Intentionally nested to mirror go/glep.
message TestNestedGroupExtensionOuter {
  message Layer1OptionalGroup {
    message Layer2RepeatedGroup {
      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: "edition_unittest.TestNestedGroupExtensionInnerExtension",
        // name: "inner",
        // }]
        ;
      string another_field = 6;
    }
    message Layer2AnotherOptionalRepeatedGroup {
      string but_why_tho = 5;
    }
    repeated Layer2RepeatedGroup layer2repeatedgroup = 2 [features.message_encoding = DELIMITED];
    repeated Layer2AnotherOptionalRepeatedGroup layer2anotheroptionalrepeatedgroup = 4 [features.message_encoding = DELIMITED];
  }
  Layer1OptionalGroup lay1optionalgroup = 1 [features.message_encoding = DELIMITED];
}

message TestNestedGroupExtensionInnerExtension {
  string inner_name= 1;
}

extend TestNestedGroupExtensionOuter.Layer1OptionalGroup.Layer2RepeatedGroup {
  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 {
  int32 foo_one = 1;

  extensions 2 to 2;
  extensions 3 to 4;

  int32 foo_two = 6;
  int32 foo_three = 7;

  extensions 9 to 10;

  int32 foo_four = 13;

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

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

    int32 bar_three = 10;

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

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

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

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

message TestVerifyMostlyInt32 {
    int64 optional_int64_30 = 30;

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

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

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

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

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

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

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

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

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

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

message TestVerifyOneInt32BigFieldNumber {
    int32 optional_int32_65 = 65;

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

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

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

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

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

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

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

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

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

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

    Nested optional_nested = 9;
    repeated Nested repeated_nested = 10;
  }
  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;
  };
  SeqSmall0 optional_seq_small_0_lowfield = 1;
  SeqSmall0 optional_seq_small_0_midfield = 1001;
  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
      [features.repeated_field_encoding = PACKED];
  repeated SeqSmall0 packed_seq_small_0_midfield = 1003
      [features.repeated_field_encoding = PACKED];
  repeated SeqSmall0 packed_seq_small_0_hifield = 1000003
      [features.repeated_field_encoding = PACKED];

  enum SeqSmall1 {
    UNKNOWN = 0;
    SEQ_SMALL_1_DEFAULT = 1;
    SEQ_SMALL_1_2 = 2;
    SEQ_SMALL_1_3 = 3;
  };
  SeqSmall1 optional_seq_small_1_lowfield = 4;
  SeqSmall1 optional_seq_small_1_midfield = 1004;
  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
      [features.repeated_field_encoding = PACKED];
  repeated SeqSmall1 packed_seq_small_1_midfield = 1006
      [features.repeated_field_encoding = PACKED];
  repeated SeqSmall1 packed_seq_small_1_hifield = 1000006
      [features.repeated_field_encoding = PACKED];

  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;
  };
  SeqLarge optional_seq_large_lowfield = 7;
  SeqLarge optional_seq_large_midfield = 1007;
  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
      [features.repeated_field_encoding = PACKED];
  repeated SeqLarge packed_seq_large_midfield = 1009
      [features.repeated_field_encoding = PACKED];
  repeated SeqLarge packed_seq_large_hifield = 1000009
      [features.repeated_field_encoding = PACKED];

  enum Arbitrary {
    ARBITRARY_DEFAULT = -123123;
    ARBITRARY_1 = -123;
    ARBITRARY_2 = 213;
    ARBITRARY_3 = 213213;
    ARBITRARY_MIN = -2147483648;
    ARBITRARY_MAX = 2147483647;
  };
  Arbitrary optional_arbitrary_lowfield = 10;
  Arbitrary optional_arbitrary_midfield = 1010;
  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
      [features.repeated_field_encoding = PACKED];
  repeated Arbitrary packed_arbitrary_midfield = 1012
      [features.repeated_field_encoding = PACKED];
  repeated Arbitrary packed_arbitrary_hifield = 1000012
      [features.repeated_field_encoding = PACKED];

  extensions 2000000 to max;
  extend EnumParseTester {
    Arbitrary optional_arbitrary_ext = 2000000;
    repeated Arbitrary repeated_arbitrary_ext = 2000001;
    repeated Arbitrary packed_arbitrary_ext = 2000002
        [features.repeated_field_encoding = PACKED];
  }

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

// This message contains different kind of bool fields to exercise the different
// parsers in table-drived.
message BoolParseTester {
  bool optional_bool_lowfield = 1;
  bool optional_bool_midfield = 1001;
  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
      [features.repeated_field_encoding = PACKED];
  repeated bool packed_bool_midfield = 1003
      [features.repeated_field_encoding = PACKED];
  repeated bool packed_bool_hifield = 1000003
      [features.repeated_field_encoding = PACKED];

  extensions 2000000 to max;
  extend BoolParseTester {
    bool optional_bool_ext = 2000000;
    repeated bool repeated_bool_ext = 2000001;
    repeated bool packed_bool_ext = 2000002
        [features.repeated_field_encoding = PACKED];
  }

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

message Int32ParseTester {
  int32 optional_int32_lowfield = 1;
  int32 optional_int32_midfield = 1001;
  int32 optional_int32_hifield = 1000001;
  repeated int32 repeated_int32_lowfield = 2;
  repeated int32 repeated_int32_midfield = 1002;
  repeated int32 repeated_int32_hifield = 1000002;
  repeated int32 packed_int32_lowfield = 3
      [features.repeated_field_encoding = PACKED];
  repeated int32 packed_int32_midfield = 1003
      [features.repeated_field_encoding = PACKED];
  repeated int32 packed_int32_hifield = 1000003
      [features.repeated_field_encoding = PACKED];

  extensions 2000000 to max;
  extend Int32ParseTester {
    int32 optional_int32_ext = 2000000;
    repeated int32 repeated_int32_ext = 2000001;
    repeated int32 packed_int32_ext = 2000002
        [features.repeated_field_encoding = PACKED];
  }

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

message Int64ParseTester {
  int64 optional_int64_lowfield = 1;
  int64 optional_int64_midfield = 1001;
  int64 optional_int64_hifield = 1000001;
  repeated int64 repeated_int64_lowfield = 2;
  repeated int64 repeated_int64_midfield = 1002;
  repeated int64 repeated_int64_hifield = 1000002;
  repeated int64 packed_int64_lowfield = 3
      [features.repeated_field_encoding = PACKED];
  repeated int64 packed_int64_midfield = 1003
      [features.repeated_field_encoding = PACKED];
  repeated int64 packed_int64_hifield = 1000003
      [features.repeated_field_encoding = PACKED];

  extensions 2000000 to max;
  extend Int64ParseTester {
    int64 optional_int64_ext = 2000000;
    repeated int64 repeated_int64_ext = 2000001;
    repeated int64 packed_int64_ext = 2000002
        [features.repeated_field_encoding = PACKED];
  }

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

message InlinedStringIdxRegressionProto {
  // We mix data to make sure aux ids and inlined string idx do not match.
  // aux_idx == inlined_string_idx == 1
  string str1 = 1;
  // aux_idx == 2
  InlinedStringIdxRegressionProto sub = 2;
  // aux_idx == 3, inlined_string_idx == 2
  string str2 = 3;
  // aux_idx == 4, inlined_string_idx == 3
  bytes str3 = 4;
}

message StringParseTester {
  string optional_string_lowfield = 1;
  string optional_string_midfield = 1001;
  string optional_string_hifield = 1000001;
  repeated string repeated_string_lowfield = 2;
  repeated string repeated_string_midfield = 1002;
  repeated string repeated_string_hifield = 1000002;

  extensions 2000000 to max;
  extend StringParseTester {
    string optional_string_ext = 2000000;
    repeated string repeated_string_ext = 2000001;
  }
}

message BadFieldNames{
  int32 OptionalInt32 = 1;
  int32 for = 2;
}

message TestNestedMessageRedaction {
  string optional_unredacted_nested_string = 1;
  string optional_redacted_nested_string = 2 [debug_redact = true];
}

message RedactedFields {
  string optional_redacted_string = 1 [debug_redact = true];
  string optional_unredacted_string = 2;
  repeated string repeated_redacted_string = 3 [debug_redact = true];
  repeated string repeated_unredacted_string = 4;
  TestNestedMessageRedaction optional_redacted_message = 5 [debug_redact = true];
  TestNestedMessageRedaction optional_unredacted_message = 6;
  repeated TestNestedMessageRedaction repeated_redacted_message = 7
      [debug_redact = true];
  repeated TestNestedMessageRedaction repeated_unredacted_message = 8;
  map<string, string> map_redacted_string = 9 [debug_redact = true];
  map<string, string> map_unredacted_string = 10;
}

message TestCord{
  bytes optional_bytes_cord = 1 [ctype=CORD];
  bytes optional_bytes_cord_default = 2 [ctype=CORD, default = "hello"];
}

message TestPackedEnumSmallRange {
  enum NestedEnum {
    UNSPECIFIED = 0;
    FOO = 1;
    BAR = 2;
    BAZ = 3;
  }
  repeated NestedEnum vals = 1
      [features.repeated_field_encoding = PACKED];
}

message EnumsForBenchmark {
  enum Flat {
    A0 = 0;
    A1 = 1;
    A2 = 2;
    A3 = 3;
    A4 = 4;
    A5 = 5;
    A6 = 6;
    A7 = 7;
    A8 = 8;
    A9 = 9;
    A10 = 10;
    A11 = 11;
    A12 = 12;
    A13 = 13;
    A14 = 14;
    A15 = 15;
  }
  // Has a few holes, bitmap can be used.
  enum AlmostFlat {
    B0 = 0;
    B1 = 1;
    B2 = 2;
    B3 = 3;
    B5 = 5;
    B6 = 6;
    B7 = 7;
    B8 = 8;
    B9 = 9;
    B11 = 11;
    B12 = 12;
    B13 = 13;
    B14 = 14;
    B15 = 15;
    B17 = 17;
    B19 = 19;
  }
  enum Sparse {
    C0 = 0;
    C536 = 536;
    C8387 = 8387;
    C9673 = 9673;
    C10285 = 10285;
    C13318 = 13318;
    C15963 = 15963;
    C16439 = 16439;
    C18197 = 18197;
    C19430 = 19430;
    C20361 = 20361;
    C20706 = 20706;
    C21050 = 21050;
    C21906 = 21906;
    C27265 = 27265;
    C30109 = 30109;
    C31670 = 31670;
  }
}

message TestMessageWithManyRepeatedPtrFields {
  repeated string repeated_string_1 = 1;
  repeated string repeated_string_2 = 2;
  repeated string repeated_string_3 = 3;
  repeated string repeated_string_4 = 4;
  repeated string repeated_string_5 = 5;
  repeated string repeated_string_6 = 6;
  repeated string repeated_string_7 = 7;
  repeated string repeated_string_8 = 8;
  repeated string repeated_string_9 = 9;
  repeated string repeated_string_10 = 10;
  repeated string repeated_string_11 = 11;
  repeated string repeated_string_12 = 12;
  repeated string repeated_string_13 = 13;
  repeated string repeated_string_14 = 14;
  repeated string repeated_string_15 = 15;
  repeated string repeated_string_16 = 16;
  repeated string repeated_string_17 = 17;
  repeated string repeated_string_18 = 18;
  repeated string repeated_string_19 = 19;
  repeated string repeated_string_20 = 20;
  repeated string repeated_string_21 = 21;
  repeated string repeated_string_22 = 22;
  repeated string repeated_string_23 = 23;
  repeated string repeated_string_24 = 24;
  repeated string repeated_string_25 = 25;
  repeated string repeated_string_26 = 26;
  repeated string repeated_string_27 = 27;
  repeated string repeated_string_28 = 28;
  repeated string repeated_string_29 = 29;
  repeated string repeated_string_30 = 30;
  repeated string repeated_string_31 = 31;
  repeated string repeated_string_32 = 32;
}
