syntax = "proto2";
package a;
import "google/protobuf/descriptor.proto";

message One {
  optional int32 one = 1;
  optional One two = 2;
  repeated int32 three = 3;
  repeated One four = 4;
}

message One2 {
  required int32 one = 1;
  required One two = 2;
  repeated int32 three = 3;
  repeated One four = 4;
}

message Two2 {
  optional int32 one = 1;
  optional One two = 2;
  repeated int32 three = 3;
  repeated One four = 4;
}

message Three2 {
  message Four2 {
    message Five2 {
      optional int32 one = 1;
      optional One two = 2;
      repeated int32 three = 3;
      repeated One four = 4;
    }
    message Six2 {
      optional int32 one = 1;
      optional One two = 2;
      repeated int32 three = 3;
      repeated One four = 4;
    }
  }
  message Seven2 {
    optional int32 one = 1;
    optional One two = 2;
    repeated int32 three = 3;
    repeated One four = 4;
  }
  message Eight2 {
    optional int32 one = 1;
    optional One two = 2;
    repeated int32 three = 3;
    repeated One four = 4;
  }
}

message Nine {
  oneof foo {
    int64 one = 1;
    Nine two = 2;
  }
}

message Ten {
  repeated int64 one = 1;
  required int64 two = 2;
}

extend google.protobuf.FieldOptions {
  repeated Nine ten_option = 10101;
}