text: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: google/protobuf/util/internal/testdata/maps.proto
  
  #define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
  #include "google/protobuf/util/internal/testdata/maps.pb.h"
  
  #include <algorithm>
  
  #include <google/protobuf/stubs/common.h>
  #include <google/protobuf/stubs/once.h>
  #include <google/protobuf/io/coded_stream.h>
  #include <google/protobuf/wire_format_lite_inl.h>
  #include <google/protobuf/descriptor.h>
  #include <google/protobuf/generated_message_reflection.h>
  #include <google/protobuf/reflection_ops.h>
  #include <google/protobuf/wire_format.h>
  // @@protoc_insertion_point(includes)
  
  namespace google {
  namespace protobuf {
  namespace testing {
  namespace maps {
  
  namespace {
  
  const ::google::protobuf::Descriptor* MapIn_descriptor_ = NULL;
  const ::google::protobuf::internal::GeneratedMessageReflection*
    MapIn_reflection_ = NULL;
  const ::google::protobuf::Descriptor* MapIn_MapInputEntry_descriptor_ = NULL;
  const ::google::protobuf::Descriptor* MapOut_descriptor_ = NULL;
  const ::google::protobuf::internal::GeneratedMessageReflection*
    MapOut_reflection_ = NULL;
  const ::google::protobuf::Descriptor* MapOut_Map1Entry_descriptor_ = NULL;
  const ::google::protobuf::Descriptor* MapOut_Map2Entry_descriptor_ = NULL;
  const ::google::protobuf::Descriptor* MapOut_Map3Entry_descriptor_ = NULL;
  const ::google::protobuf::Descriptor* MapM_descriptor_ = NULL;
  const ::google::protobuf::internal::GeneratedMessageReflection*
    MapM_reflection_ = NULL;
  
  }  // namespace
  
  
  void protobuf_AssignDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto() {
    protobuf_AddDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto();
    const ::google::protobuf::FileDescriptor* file =
      ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
        "google/protobuf/util/internal/testdata/maps.proto");
    GOOGLE_CHECK(file != NULL);
    MapIn_descriptor_ = file->message_type(0);
    static const int MapIn_offsets_[3] = {
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapIn, other_),
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapIn, things_),
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapIn, map_input_),
    };
    MapIn_reflection_ =
      ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
        MapIn_descriptor_,
        MapIn::default_instance_,
        MapIn_offsets_,
        -1,
        -1,
        -1,
        sizeof(MapIn),
        GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapIn, _internal_metadata_),
        GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapIn, _is_default_instance_));
    MapIn_MapInputEntry_descriptor_ = MapIn_descriptor_->nested_type(0);
    MapOut_descriptor_ = file->message_type(1);
    static const int MapOut_offsets_[4] = {
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapOut, map1_),
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapOut, map2_),
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapOut, map3_),
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapOut, bar_),
    };
    MapOut_reflection_ =
      ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
        MapOut_descriptor_,
        MapOut::default_instance_,
        MapOut_offsets_,
        -1,
        -1,
        -1,
        sizeof(MapOut),
        GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapOut, _internal_metadata_),
        GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapOut, _is_default_instance_));
    MapOut_Map1Entry_descriptor_ = MapOut_descriptor_->nested_type(0);
    MapOut_Map2Entry_descriptor_ = MapOut_descriptor_->nested_type(1);
    MapOut_Map3Entry_descriptor_ = MapOut_descriptor_->nested_type(2);
    MapM_descriptor_ = file->message_type(2);
    static const int MapM_offsets_[1] = {
      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapM, foo_),
    };
    MapM_reflection_ =
      ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
        MapM_descriptor_,
        MapM::default_instance_,
        MapM_offsets_,
        -1,
        -1,
        -1,
        sizeof(MapM),
        GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapM, _internal_metadata_),
        GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapM, _is_default_instance_));
  }
  
  namespace {
  
  GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
  inline void protobuf_AssignDescriptorsOnce() {
    ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
                   &protobuf_AssignDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto);
  }
  
  void protobuf_RegisterTypes(const ::std::string&) {
    protobuf_AssignDescriptorsOnce();
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
        MapIn_descriptor_, &MapIn::default_instance());
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
          MapIn_MapInputEntry_descriptor_,
          ::google::protobuf::internal::MapEntry<
              ::std::string,
              ::std::string,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              0>::CreateDefaultInstance(
                  MapIn_MapInputEntry_descriptor_));
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
        MapOut_descriptor_, &MapOut::default_instance());
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
          MapOut_Map1Entry_descriptor_,
          ::google::protobuf::internal::MapEntry<
              ::std::string,
              ::google::protobuf::testing::maps::MapM,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
              0>::CreateDefaultInstance(
                  MapOut_Map1Entry_descriptor_));
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
          MapOut_Map2Entry_descriptor_,
          ::google::protobuf::internal::MapEntry<
              ::std::string,
              ::google::protobuf::testing::maps::MapOut,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
              0>::CreateDefaultInstance(
                  MapOut_Map2Entry_descriptor_));
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
          MapOut_Map3Entry_descriptor_,
          ::google::protobuf::internal::MapEntry<
              ::google::protobuf::int32,
              ::std::string,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              0>::CreateDefaultInstance(
                  MapOut_Map3Entry_descriptor_));
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
        MapM_descriptor_, &MapM::default_instance());
  }
  
  }  // namespace
  
  void protobuf_ShutdownFile_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto() {
    delete MapIn::default_instance_;
    delete MapIn_reflection_;
    delete MapOut::default_instance_;
    delete MapOut_reflection_;
    delete MapM::default_instance_;
    delete MapM_reflection_;
  }
  
  void protobuf_AddDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto() {
    static bool already_here = false;
    if (already_here) return;
    already_here = true;
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      "\n1google/protobuf/util/internal/testdata"
      "/maps.proto\022\034google.protobuf.testing.map"
      "s\"\235\001\n\005MapIn\022\r\n\005other\030\001 \001(\t\022\016\n\006things\030\002 \003"
      "(\t\022D\n\tmap_input\030\003 \003(\01321.google.protobuf."
      "testing.maps.MapIn.MapInputEntry\032/\n\rMapI"
      "nputEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028"
      "\001\"\240\003\n\006MapOut\022<\n\004map1\030\001 \003(\0132..google.prot"
      "obuf.testing.maps.MapOut.Map1Entry\022<\n\004ma"
      "p2\030\002 \003(\0132..google.protobuf.testing.maps."
      "MapOut.Map2Entry\022<\n\004map3\030\003 \003(\0132..google."
      "protobuf.testing.maps.MapOut.Map3Entry\022\013"
      "\n\003bar\030\004 \001(\t\032O\n\tMap1Entry\022\013\n\003key\030\001 \001(\t\0221\n"
      "\005value\030\002 \001(\0132\".google.protobuf.testing.m"
      "aps.MapM:\0028\001\032Q\n\tMap2Entry\022\013\n\003key\030\001 \001(\t\0223"
      "\n\005value\030\002 \001(\0132$.google.protobuf.testing."
      "maps.MapOut:\0028\001\032+\n\tMap3Entry\022\013\n\003key\030\001 \001("
      "\005\022\r\n\005value\030\002 \001(\t:\0028\001\"\023\n\004MapM\022\013\n\003foo\030\001 \001("
      "\t2\265\001\n\013TestService\022R\n\005Call1\022#.google.prot"
      "obuf.testing.maps.MapIn\032$.google.protobu"
      "f.testing.maps.MapOut\022R\n\005Call2\022#.google."
      "protobuf.testing.maps.MapIn\032$.google.pro"
      "tobuf.testing.maps.MapOutB\"\n com.google."
      "protobuf.testing.mapsb\006proto3", 909);
    ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
      "google/protobuf/util/internal/testdata/maps.proto", &protobuf_RegisterTypes);
    MapIn::default_instance_ = new MapIn();
    MapOut::default_instance_ = new MapOut();
    MapM::default_instance_ = new MapM();
    MapIn::default_instance_->InitAsDefaultInstance();
    MapOut::default_instance_->InitAsDefaultInstance();
    MapM::default_instance_->InitAsDefaultInstance();
    ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto);
  }
  
  // Force AddDescriptors() to be called at static initialization time.
  struct StaticDescriptorInitializer_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto {
    StaticDescriptorInitializer_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto() {
      protobuf_AddDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto();
    }
  } static_descriptor_initializer_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto_;
  
  namespace {
  
  static void MergeFromFail(int line) GOOGLE_ATTRIBUTE_COLD;
  static void MergeFromFail(int line) {
    GOOGLE_CHECK(false) << __FILE__ << ":" << line;
  }
  
  }  // namespace
  
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int MapIn::kOtherFieldNumber;
  const int MapIn::kThingsFieldNumber;
  const int MapIn::kMapInputFieldNumber;
  #endif  // !_MSC_VER
  
  MapIn::MapIn()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.protobuf.testing.maps.MapIn)
  }
  
  void MapIn::InitAsDefaultInstance() {
    _is_default_instance_ = true;
  }
  
  MapIn::MapIn(const MapIn& from)
    : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
    SharedCtor();
    MergeFrom(from);
    // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.maps.MapIn)
  }
  
  void MapIn::SharedCtor() {
      _is_default_instance_ = false;
    ::google::protobuf::internal::GetEmptyString();
    _cached_size_ = 0;
    other_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    map_input_.SetAssignDescriptorCallback(
        protobuf_AssignDescriptorsOnce);
    map_input_.SetEntryDescriptor(
        &::google::protobuf::testing::maps::MapIn_MapInputEntry_descriptor_);
  }
  
  MapIn::~MapIn() {
    // @@protoc_insertion_point(destructor:google.protobuf.testing.maps.MapIn)
    SharedDtor();
  }
  
  void MapIn::SharedDtor() {
    other_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != default_instance_) {
    }
  }
  
  void MapIn::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const ::google::protobuf::Descriptor* MapIn::descriptor() {
    protobuf_AssignDescriptorsOnce();
    return MapIn_descriptor_;
  }
  
  const MapIn& MapIn::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto();
    return *default_instance_;
  }
  
  MapIn* MapIn::default_instance_ = NULL;
  
  MapIn* MapIn::New(::google::protobuf::Arena* arena) const {
    MapIn* n = new MapIn;
    if (arena != NULL) {
      arena->Own(n);
    }
    return n;
  }
  
  void MapIn::Clear() {
    other_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    things_.Clear();
    map_input_.Clear();
  }
  
  bool MapIn::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:google.protobuf.testing.maps.MapIn)
    for (;;) {
      ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // optional string other = 1;
        case 1: {
          if (tag == 10) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_other()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->other().data(), this->other().length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapIn.other"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectTag(18)) goto parse_things;
          break;
        }
  
        // repeated string things = 2;
        case 2: {
          if (tag == 18) {
           parse_things:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->add_things()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->things(this->things_size() - 1).data(),
              this->things(this->things_size() - 1).length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapIn.things"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectTag(18)) goto parse_things;
          if (input->ExpectTag(26)) goto parse_map_input;
          break;
        }
  
        // map<string, string> map_input = 3;
        case 3: {
          if (tag == 26) {
           parse_map_input:
            DO_(input->IncrementRecursionDepth());
           parse_loop_map_input:
            ::google::protobuf::scoped_ptr<MapIn_MapInputEntry> entry(map_input_.NewEntry());
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, entry.get()));
            (*mutable_map_input())[entry->key()] = *entry->mutable_value();
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              entry->key().data(), entry->key().length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapIn.MapInputEntry.key"));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              entry->mutable_value()->data(),
              entry->mutable_value()->length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapIn.MapInputEntry.value"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectTag(26)) goto parse_loop_map_input;
          input->UnsafeDecrementRecursionDepth();
          if (input->ExpectAtEnd()) goto success;
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0 ||
              ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:google.protobuf.testing.maps.MapIn)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:google.protobuf.testing.maps.MapIn)
    return false;
  #undef DO_
  }
  
  void MapIn::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:google.protobuf.testing.maps.MapIn)
    // optional string other = 1;
    if (this->other().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->other().data(), this->other().length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapIn.other");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->other(), output);
    }
  
    // repeated string things = 2;
    for (int i = 0; i < this->things_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->things(i).data(), this->things(i).length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapIn.things");
      ::google::protobuf::internal::WireFormatLite::WriteString(
        2, this->things(i), output);
    }
  
    // map<string, string> map_input = 3;
    {
      ::google::protobuf::scoped_ptr<MapIn_MapInputEntry> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->map_input().begin();
          it != this->map_input().end(); ++it) {
        entry.reset(map_input_.NewEntryWrapper(it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            3, *entry, output);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->first.data(), it->first.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapIn.MapInputEntry.key");
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->second.data(), it->second.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapIn.MapInputEntry.value");
      }
    }
  
    // @@protoc_insertion_point(serialize_end:google.protobuf.testing.maps.MapIn)
  }
  
  ::google::protobuf::uint8* MapIn::SerializeWithCachedSizesToArray(
      ::google::protobuf::uint8* target) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.maps.MapIn)
    // optional string other = 1;
    if (this->other().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->other().data(), this->other().length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapIn.other");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->other(), target);
    }
  
    // repeated string things = 2;
    for (int i = 0; i < this->things_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->things(i).data(), this->things(i).length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapIn.things");
      target = ::google::protobuf::internal::WireFormatLite::
        WriteStringToArray(2, this->things(i), target);
    }
  
    // map<string, string> map_input = 3;
    {
      ::google::protobuf::scoped_ptr<MapIn_MapInputEntry> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->map_input().begin();
          it != this->map_input().end(); ++it) {
        entry.reset(map_input_.NewEntryWrapper(it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
            WriteMessageNoVirtualToArray(
                3, *entry, target);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->first.data(), it->first.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapIn.MapInputEntry.key");
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->second.data(), it->second.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapIn.MapInputEntry.value");
      }
    }
  
    // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.maps.MapIn)
    return target;
  }
  
  int MapIn::ByteSize() const {
    int total_size = 0;
  
    // optional string other = 1;
    if (this->other().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->other());
    }
  
    // repeated string things = 2;
    total_size += 1 * this->things_size();
    for (int i = 0; i < this->things_size(); i++) {
      total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
        this->things(i));
    }
  
    // map<string, string> map_input = 3;
    total_size += 1 * this->map_input_size();
    {
      ::google::protobuf::scoped_ptr<MapIn_MapInputEntry> entry;
      for (::google::protobuf::Map< ::std::string, ::std::string >::const_iterator
          it = this->map_input().begin();
          it != this->map_input().end(); ++it) {
        entry.reset(map_input_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void MapIn::MergeFrom(const ::google::protobuf::Message& from) {
    if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__);
    const MapIn* source = 
        ::google::protobuf::internal::DynamicCastToGenerated<const MapIn>(
            &from);
    if (source == NULL) {
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
      MergeFrom(*source);
    }
  }
  
  void MapIn::MergeFrom(const MapIn& from) {
    if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__);
    things_.MergeFrom(from.things_);
    map_input_.MergeFrom(from.map_input_);
    if (from.other().size() > 0) {
  
      other_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.other_);
    }
  }
  
  void MapIn::CopyFrom(const ::google::protobuf::Message& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MapIn::CopyFrom(const MapIn& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MapIn::IsInitialized() const {
  
    return true;
  }
  
  void MapIn::Swap(MapIn* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MapIn::InternalSwap(MapIn* other) {
    other_.Swap(&other->other_);
    things_.UnsafeArenaSwap(&other->things_);
    map_input_.Swap(&other->map_input_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
    std::swap(_cached_size_, other->_cached_size_);
  }
  
  ::google::protobuf::Metadata MapIn::GetMetadata() const {
    protobuf_AssignDescriptorsOnce();
    ::google::protobuf::Metadata metadata;
    metadata.descriptor = MapIn_descriptor_;
    metadata.reflection = MapIn_reflection_;
    return metadata;
  }
  
  #if PROTOBUF_INLINE_NOT_IN_HEADERS
  // MapIn
  
  // optional string other = 1;
  void MapIn::clear_other() {
    other_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   const ::std::string& MapIn::other() const {
    // @@protoc_insertion_point(field_get:google.protobuf.testing.maps.MapIn.other)
    return other_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   void MapIn::set_other(const ::std::string& value) {
    
    other_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
    // @@protoc_insertion_point(field_set:google.protobuf.testing.maps.MapIn.other)
  }
   void MapIn::set_other(const char* value) {
    
    other_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
    // @@protoc_insertion_point(field_set_char:google.protobuf.testing.maps.MapIn.other)
  }
   void MapIn::set_other(const char* value, size_t size) {
    
    other_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
        ::std::string(reinterpret_cast<const char*>(value), size));
    // @@protoc_insertion_point(field_set_pointer:google.protobuf.testing.maps.MapIn.other)
  }
   ::std::string* MapIn::mutable_other() {
    
    // @@protoc_insertion_point(field_mutable:google.protobuf.testing.maps.MapIn.other)
    return other_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   ::std::string* MapIn::release_other() {
    
    return other_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   void MapIn::set_allocated_other(::std::string* other) {
    if (other != NULL) {
      
    } else {
      
    }
    other_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), other);
    // @@protoc_insertion_point(field_set_allocated:google.protobuf.testing.maps.MapIn.other)
  }
  
  // repeated string things = 2;
  int MapIn::things_size() const {
    return things_.size();
  }
  void MapIn::clear_things() {
    things_.Clear();
  }
   const ::std::string& MapIn::things(int index) const {
    // @@protoc_insertion_point(field_get:google.protobuf.testing.maps.MapIn.things)
    return things_.Get(index);
  }
   ::std::string* MapIn::mutable_things(int index) {
    // @@protoc_insertion_point(field_mutable:google.protobuf.testing.maps.MapIn.things)
    return things_.Mutable(index);
  }
   void MapIn::set_things(int index, const ::std::string& value) {
    // @@protoc_insertion_point(field_set:google.protobuf.testing.maps.MapIn.things)
    things_.Mutable(index)->assign(value);
  }
   void MapIn::set_things(int index, const char* value) {
    things_.Mutable(index)->assign(value);
    // @@protoc_insertion_point(field_set_char:google.protobuf.testing.maps.MapIn.things)
  }
   void MapIn::set_things(int index, const char* value, size_t size) {
    things_.Mutable(index)->assign(
      reinterpret_cast<const char*>(value), size);
    // @@protoc_insertion_point(field_set_pointer:google.protobuf.testing.maps.MapIn.things)
  }
   ::std::string* MapIn::add_things() {
    return things_.Add();
  }
   void MapIn::add_things(const ::std::string& value) {
    things_.Add()->assign(value);
    // @@protoc_insertion_point(field_add:google.protobuf.testing.maps.MapIn.things)
  }
   void MapIn::add_things(const char* value) {
    things_.Add()->assign(value);
    // @@protoc_insertion_point(field_add_char:google.protobuf.testing.maps.MapIn.things)
  }
   void MapIn::add_things(const char* value, size_t size) {
    things_.Add()->assign(reinterpret_cast<const char*>(value), size);
    // @@protoc_insertion_point(field_add_pointer:google.protobuf.testing.maps.MapIn.things)
  }
   const ::google::protobuf::RepeatedPtrField< ::std::string>&
  MapIn::things() const {
    // @@protoc_insertion_point(field_list:google.protobuf.testing.maps.MapIn.things)
    return things_;
  }
   ::google::protobuf::RepeatedPtrField< ::std::string>*
  MapIn::mutable_things() {
    // @@protoc_insertion_point(field_mutable_list:google.protobuf.testing.maps.MapIn.things)
    return &things_;
  }
  
  // map<string, string> map_input = 3;
  int MapIn::map_input_size() const {
    return map_input_.size();
  }
  void MapIn::clear_map_input() {
    map_input_.Clear();
  }
   const ::google::protobuf::Map< ::std::string, ::std::string >&
  MapIn::map_input() const {
    // @@protoc_insertion_point(field_map:google.protobuf.testing.maps.MapIn.map_input)
    return map_input_.GetMap();
  }
   ::google::protobuf::Map< ::std::string, ::std::string >*
  MapIn::mutable_map_input() {
    // @@protoc_insertion_point(field_mutable_map:google.protobuf.testing.maps.MapIn.map_input)
    return map_input_.MutableMap();
  }
  
  #endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int MapOut::kMap1FieldNumber;
  const int MapOut::kMap2FieldNumber;
  const int MapOut::kMap3FieldNumber;
  const int MapOut::kBarFieldNumber;
  #endif  // !_MSC_VER
  
  MapOut::MapOut()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.protobuf.testing.maps.MapOut)
  }
  
  void MapOut::InitAsDefaultInstance() {
    _is_default_instance_ = true;
  }
  
  MapOut::MapOut(const MapOut& from)
    : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
    SharedCtor();
    MergeFrom(from);
    // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.maps.MapOut)
  }
  
  void MapOut::SharedCtor() {
      _is_default_instance_ = false;
    ::google::protobuf::internal::GetEmptyString();
    _cached_size_ = 0;
    map1_.SetAssignDescriptorCallback(
        protobuf_AssignDescriptorsOnce);
    map1_.SetEntryDescriptor(
        &::google::protobuf::testing::maps::MapOut_Map1Entry_descriptor_);
    map2_.SetAssignDescriptorCallback(
        protobuf_AssignDescriptorsOnce);
    map2_.SetEntryDescriptor(
        &::google::protobuf::testing::maps::MapOut_Map2Entry_descriptor_);
    map3_.SetAssignDescriptorCallback(
        protobuf_AssignDescriptorsOnce);
    map3_.SetEntryDescriptor(
        &::google::protobuf::testing::maps::MapOut_Map3Entry_descriptor_);
    bar_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  MapOut::~MapOut() {
    // @@protoc_insertion_point(destructor:google.protobuf.testing.maps.MapOut)
    SharedDtor();
  }
  
  void MapOut::SharedDtor() {
    bar_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != default_instance_) {
    }
  }
  
  void MapOut::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const ::google::protobuf::Descriptor* MapOut::descriptor() {
    protobuf_AssignDescriptorsOnce();
    return MapOut_descriptor_;
  }
  
  const MapOut& MapOut::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto();
    return *default_instance_;
  }
  
  MapOut* MapOut::default_instance_ = NULL;
  
  MapOut* MapOut::New(::google::protobuf::Arena* arena) const {
    MapOut* n = new MapOut;
    if (arena != NULL) {
      arena->Own(n);
    }
    return n;
  }
  
  void MapOut::Clear() {
    bar_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    map1_.Clear();
    map2_.Clear();
    map3_.Clear();
  }
  
  bool MapOut::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:google.protobuf.testing.maps.MapOut)
    for (;;) {
      ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // map<string, .google.protobuf.testing.maps.MapM> map1 = 1;
        case 1: {
          if (tag == 10) {
            DO_(input->IncrementRecursionDepth());
           parse_loop_map1:
            ::google::protobuf::scoped_ptr<MapOut_Map1Entry> entry(map1_.NewEntry());
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, entry.get()));
            (*mutable_map1())[entry->key()].Swap(entry->mutable_value());
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              entry->key().data(), entry->key().length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapOut.Map1Entry.key"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectTag(10)) goto parse_loop_map1;
          if (input->ExpectTag(18)) goto parse_loop_map2;
          input->UnsafeDecrementRecursionDepth();
          break;
        }
  
        // map<string, .google.protobuf.testing.maps.MapOut> map2 = 2;
        case 2: {
          if (tag == 18) {
            DO_(input->IncrementRecursionDepth());
           parse_loop_map2:
            ::google::protobuf::scoped_ptr<MapOut_Map2Entry> entry(map2_.NewEntry());
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, entry.get()));
            (*mutable_map2())[entry->key()].Swap(entry->mutable_value());
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              entry->key().data(), entry->key().length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapOut.Map2Entry.key"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectTag(18)) goto parse_loop_map2;
          if (input->ExpectTag(26)) goto parse_loop_map3;
          input->UnsafeDecrementRecursionDepth();
          break;
        }
  
        // map<int32, string> map3 = 3;
        case 3: {
          if (tag == 26) {
            DO_(input->IncrementRecursionDepth());
           parse_loop_map3:
            ::google::protobuf::scoped_ptr<MapOut_Map3Entry> entry(map3_.NewEntry());
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, entry.get()));
            (*mutable_map3())[entry->key()] = *entry->mutable_value();
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              entry->mutable_value()->data(),
              entry->mutable_value()->length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapOut.Map3Entry.value"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectTag(26)) goto parse_loop_map3;
          input->UnsafeDecrementRecursionDepth();
          if (input->ExpectTag(34)) goto parse_bar;
          break;
        }
  
        // optional string bar = 4;
        case 4: {
          if (tag == 34) {
           parse_bar:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_bar()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->bar().data(), this->bar().length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapOut.bar"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectAtEnd()) goto success;
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0 ||
              ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:google.protobuf.testing.maps.MapOut)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:google.protobuf.testing.maps.MapOut)
    return false;
  #undef DO_
  }
  
  void MapOut::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:google.protobuf.testing.maps.MapOut)
    // map<string, .google.protobuf.testing.maps.MapM> map1 = 1;
    {
      ::google::protobuf::scoped_ptr<MapOut_Map1Entry> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapM >::const_iterator
          it = this->map1().begin();
          it != this->map1().end(); ++it) {
        entry.reset(map1_.NewEntryWrapper(it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            1, *entry, output);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->first.data(), it->first.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapOut.Map1Entry.key");
      }
    }
  
    // map<string, .google.protobuf.testing.maps.MapOut> map2 = 2;
    {
      ::google::protobuf::scoped_ptr<MapOut_Map2Entry> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapOut >::const_iterator
          it = this->map2().begin();
          it != this->map2().end(); ++it) {
        entry.reset(map2_.NewEntryWrapper(it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->first.data(), it->first.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapOut.Map2Entry.key");
      }
    }
  
    // map<int32, string> map3 = 3;
    {
      ::google::protobuf::scoped_ptr<MapOut_Map3Entry> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::std::string >::const_iterator
          it = this->map3().begin();
          it != this->map3().end(); ++it) {
        entry.reset(map3_.NewEntryWrapper(it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            3, *entry, output);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->second.data(), it->second.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapOut.Map3Entry.value");
      }
    }
  
    // optional string bar = 4;
    if (this->bar().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->bar().data(), this->bar().length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapOut.bar");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        4, this->bar(), output);
    }
  
    // @@protoc_insertion_point(serialize_end:google.protobuf.testing.maps.MapOut)
  }
  
  ::google::protobuf::uint8* MapOut::SerializeWithCachedSizesToArray(
      ::google::protobuf::uint8* target) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.maps.MapOut)
    // map<string, .google.protobuf.testing.maps.MapM> map1 = 1;
    {
      ::google::protobuf::scoped_ptr<MapOut_Map1Entry> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapM >::const_iterator
          it = this->map1().begin();
          it != this->map1().end(); ++it) {
        entry.reset(map1_.NewEntryWrapper(it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
            WriteMessageNoVirtualToArray(
                1, *entry, target);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->first.data(), it->first.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapOut.Map1Entry.key");
      }
    }
  
    // map<string, .google.protobuf.testing.maps.MapOut> map2 = 2;
    {
      ::google::protobuf::scoped_ptr<MapOut_Map2Entry> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapOut >::const_iterator
          it = this->map2().begin();
          it != this->map2().end(); ++it) {
        entry.reset(map2_.NewEntryWrapper(it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
            WriteMessageNoVirtualToArray(
                2, *entry, target);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->first.data(), it->first.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapOut.Map2Entry.key");
      }
    }
  
    // map<int32, string> map3 = 3;
    {
      ::google::protobuf::scoped_ptr<MapOut_Map3Entry> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::std::string >::const_iterator
          it = this->map3().begin();
          it != this->map3().end(); ++it) {
        entry.reset(map3_.NewEntryWrapper(it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
            WriteMessageNoVirtualToArray(
                3, *entry, target);
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          it->second.data(), it->second.length(),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "google.protobuf.testing.maps.MapOut.Map3Entry.value");
      }
    }
  
    // optional string bar = 4;
    if (this->bar().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->bar().data(), this->bar().length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapOut.bar");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          4, this->bar(), target);
    }
  
    // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.maps.MapOut)
    return target;
  }
  
  int MapOut::ByteSize() const {
    int total_size = 0;
  
    // optional string bar = 4;
    if (this->bar().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->bar());
    }
  
    // map<string, .google.protobuf.testing.maps.MapM> map1 = 1;
    total_size += 1 * this->map1_size();
    {
      ::google::protobuf::scoped_ptr<MapOut_Map1Entry> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapM >::const_iterator
          it = this->map1().begin();
          it != this->map1().end(); ++it) {
        entry.reset(map1_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // map<string, .google.protobuf.testing.maps.MapOut> map2 = 2;
    total_size += 1 * this->map2_size();
    {
      ::google::protobuf::scoped_ptr<MapOut_Map2Entry> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapOut >::const_iterator
          it = this->map2().begin();
          it != this->map2().end(); ++it) {
        entry.reset(map2_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    // map<int32, string> map3 = 3;
    total_size += 1 * this->map3_size();
    {
      ::google::protobuf::scoped_ptr<MapOut_Map3Entry> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::std::string >::const_iterator
          it = this->map3().begin();
          it != this->map3().end(); ++it) {
        entry.reset(map3_.NewEntryWrapper(it->first, it->second));
        total_size += ::google::protobuf::internal::WireFormatLite::
            MessageSizeNoVirtual(*entry);
      }
    }
  
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void MapOut::MergeFrom(const ::google::protobuf::Message& from) {
    if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__);
    const MapOut* source = 
        ::google::protobuf::internal::DynamicCastToGenerated<const MapOut>(
            &from);
    if (source == NULL) {
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
      MergeFrom(*source);
    }
  }
  
  void MapOut::MergeFrom(const MapOut& from) {
    if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__);
    map1_.MergeFrom(from.map1_);
    map2_.MergeFrom(from.map2_);
    map3_.MergeFrom(from.map3_);
    if (from.bar().size() > 0) {
  
      bar_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.bar_);
    }
  }
  
  void MapOut::CopyFrom(const ::google::protobuf::Message& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MapOut::CopyFrom(const MapOut& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MapOut::IsInitialized() const {
  
    return true;
  }
  
  void MapOut::Swap(MapOut* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MapOut::InternalSwap(MapOut* other) {
    map1_.Swap(&other->map1_);
    map2_.Swap(&other->map2_);
    map3_.Swap(&other->map3_);
    bar_.Swap(&other->bar_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
    std::swap(_cached_size_, other->_cached_size_);
  }
  
  ::google::protobuf::Metadata MapOut::GetMetadata() const {
    protobuf_AssignDescriptorsOnce();
    ::google::protobuf::Metadata metadata;
    metadata.descriptor = MapOut_descriptor_;
    metadata.reflection = MapOut_reflection_;
    return metadata;
  }
  
  #if PROTOBUF_INLINE_NOT_IN_HEADERS
  // MapOut
  
  // map<string, .google.protobuf.testing.maps.MapM> map1 = 1;
  int MapOut::map1_size() const {
    return map1_.size();
  }
  void MapOut::clear_map1() {
    map1_.Clear();
  }
   const ::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapM >&
  MapOut::map1() const {
    // @@protoc_insertion_point(field_map:google.protobuf.testing.maps.MapOut.map1)
    return map1_.GetMap();
  }
   ::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapM >*
  MapOut::mutable_map1() {
    // @@protoc_insertion_point(field_mutable_map:google.protobuf.testing.maps.MapOut.map1)
    return map1_.MutableMap();
  }
  
  // map<string, .google.protobuf.testing.maps.MapOut> map2 = 2;
  int MapOut::map2_size() const {
    return map2_.size();
  }
  void MapOut::clear_map2() {
    map2_.Clear();
  }
   const ::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapOut >&
  MapOut::map2() const {
    // @@protoc_insertion_point(field_map:google.protobuf.testing.maps.MapOut.map2)
    return map2_.GetMap();
  }
   ::google::protobuf::Map< ::std::string, ::google::protobuf::testing::maps::MapOut >*
  MapOut::mutable_map2() {
    // @@protoc_insertion_point(field_mutable_map:google.protobuf.testing.maps.MapOut.map2)
    return map2_.MutableMap();
  }
  
  // map<int32, string> map3 = 3;
  int MapOut::map3_size() const {
    return map3_.size();
  }
  void MapOut::clear_map3() {
    map3_.Clear();
  }
   const ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >&
  MapOut::map3() const {
    // @@protoc_insertion_point(field_map:google.protobuf.testing.maps.MapOut.map3)
    return map3_.GetMap();
  }
   ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >*
  MapOut::mutable_map3() {
    // @@protoc_insertion_point(field_mutable_map:google.protobuf.testing.maps.MapOut.map3)
    return map3_.MutableMap();
  }
  
  // optional string bar = 4;
  void MapOut::clear_bar() {
    bar_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   const ::std::string& MapOut::bar() const {
    // @@protoc_insertion_point(field_get:google.protobuf.testing.maps.MapOut.bar)
    return bar_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   void MapOut::set_bar(const ::std::string& value) {
    
    bar_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
    // @@protoc_insertion_point(field_set:google.protobuf.testing.maps.MapOut.bar)
  }
   void MapOut::set_bar(const char* value) {
    
    bar_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
    // @@protoc_insertion_point(field_set_char:google.protobuf.testing.maps.MapOut.bar)
  }
   void MapOut::set_bar(const char* value, size_t size) {
    
    bar_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
        ::std::string(reinterpret_cast<const char*>(value), size));
    // @@protoc_insertion_point(field_set_pointer:google.protobuf.testing.maps.MapOut.bar)
  }
   ::std::string* MapOut::mutable_bar() {
    
    // @@protoc_insertion_point(field_mutable:google.protobuf.testing.maps.MapOut.bar)
    return bar_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   ::std::string* MapOut::release_bar() {
    
    return bar_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   void MapOut::set_allocated_bar(::std::string* bar) {
    if (bar != NULL) {
      
    } else {
      
    }
    bar_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), bar);
    // @@protoc_insertion_point(field_set_allocated:google.protobuf.testing.maps.MapOut.bar)
  }
  
  #endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int MapM::kFooFieldNumber;
  #endif  // !_MSC_VER
  
  MapM::MapM()
    : ::google::protobuf::Message(), _internal_metadata_(NULL) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.protobuf.testing.maps.MapM)
  }
  
  void MapM::InitAsDefaultInstance() {
    _is_default_instance_ = true;
  }
  
  MapM::MapM(const MapM& from)
    : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
    SharedCtor();
    MergeFrom(from);
    // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.maps.MapM)
  }
  
  void MapM::SharedCtor() {
      _is_default_instance_ = false;
    ::google::protobuf::internal::GetEmptyString();
    _cached_size_ = 0;
    foo_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  MapM::~MapM() {
    // @@protoc_insertion_point(destructor:google.protobuf.testing.maps.MapM)
    SharedDtor();
  }
  
  void MapM::SharedDtor() {
    foo_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
    if (this != default_instance_) {
    }
  }
  
  void MapM::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const ::google::protobuf::Descriptor* MapM::descriptor() {
    protobuf_AssignDescriptorsOnce();
    return MapM_descriptor_;
  }
  
  const MapM& MapM::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_google_2fprotobuf_2futil_2finternal_2ftestdata_2fmaps_2eproto();
    return *default_instance_;
  }
  
  MapM* MapM::default_instance_ = NULL;
  
  MapM* MapM::New(::google::protobuf::Arena* arena) const {
    MapM* n = new MapM;
    if (arena != NULL) {
      arena->Own(n);
    }
    return n;
  }
  
  void MapM::Clear() {
    foo_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
  
  bool MapM::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
    ::google::protobuf::uint32 tag;
    // @@protoc_insertion_point(parse_start:google.protobuf.testing.maps.MapM)
    for (;;) {
      ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
      tag = p.first;
      if (!p.second) goto handle_unusual;
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // optional string foo = 1;
        case 1: {
          if (tag == 10) {
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_foo()));
            DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
              this->foo().data(), this->foo().length(),
              ::google::protobuf::internal::WireFormatLite::PARSE,
              "google.protobuf.testing.maps.MapM.foo"));
          } else {
            goto handle_unusual;
          }
          if (input->ExpectAtEnd()) goto success;
          break;
        }
  
        default: {
        handle_unusual:
          if (tag == 0 ||
              ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            goto success;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
  success:
    // @@protoc_insertion_point(parse_success:google.protobuf.testing.maps.MapM)
    return true;
  failure:
    // @@protoc_insertion_point(parse_failure:google.protobuf.testing.maps.MapM)
    return false;
  #undef DO_
  }
  
  void MapM::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // @@protoc_insertion_point(serialize_start:google.protobuf.testing.maps.MapM)
    // optional string foo = 1;
    if (this->foo().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->foo().data(), this->foo().length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapM.foo");
      ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
        1, this->foo(), output);
    }
  
    // @@protoc_insertion_point(serialize_end:google.protobuf.testing.maps.MapM)
  }
  
  ::google::protobuf::uint8* MapM::SerializeWithCachedSizesToArray(
      ::google::protobuf::uint8* target) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.maps.MapM)
    // optional string foo = 1;
    if (this->foo().size() > 0) {
      ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        this->foo().data(), this->foo().length(),
        ::google::protobuf::internal::WireFormatLite::SERIALIZE,
        "google.protobuf.testing.maps.MapM.foo");
      target =
        ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
          1, this->foo(), target);
    }
  
    // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.maps.MapM)
    return target;
  }
  
  int MapM::ByteSize() const {
    int total_size = 0;
  
    // optional string foo = 1;
    if (this->foo().size() > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->foo());
    }
  
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void MapM::MergeFrom(const ::google::protobuf::Message& from) {
    if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__);
    const MapM* source = 
        ::google::protobuf::internal::DynamicCastToGenerated<const MapM>(
            &from);
    if (source == NULL) {
      ::google::protobuf::internal::ReflectionOps::Merge(from, this);
    } else {
      MergeFrom(*source);
    }
  }
  
  void MapM::MergeFrom(const MapM& from) {
    if (GOOGLE_PREDICT_FALSE(&from == this)) MergeFromFail(__LINE__);
    if (from.foo().size() > 0) {
  
      foo_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.foo_);
    }
  }
  
  void MapM::CopyFrom(const ::google::protobuf::Message& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MapM::CopyFrom(const MapM& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MapM::IsInitialized() const {
  
    return true;
  }
  
  void MapM::Swap(MapM* other) {
    if (other == this) return;
    InternalSwap(other);
  }
  void MapM::InternalSwap(MapM* other) {
    foo_.Swap(&other->foo_);
    _internal_metadata_.Swap(&other->_internal_metadata_);
    std::swap(_cached_size_, other->_cached_size_);
  }
  
  ::google::protobuf::Metadata MapM::GetMetadata() const {
    protobuf_AssignDescriptorsOnce();
    ::google::protobuf::Metadata metadata;
    metadata.descriptor = MapM_descriptor_;
    metadata.reflection = MapM_reflection_;
    return metadata;
  }
  
  #if PROTOBUF_INLINE_NOT_IN_HEADERS
  // MapM
  
  // optional string foo = 1;
  void MapM::clear_foo() {
    foo_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   const ::std::string& MapM::foo() const {
    // @@protoc_insertion_point(field_get:google.protobuf.testing.maps.MapM.foo)
    return foo_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   void MapM::set_foo(const ::std::string& value) {
    
    foo_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
    // @@protoc_insertion_point(field_set:google.protobuf.testing.maps.MapM.foo)
  }
   void MapM::set_foo(const char* value) {
    
    foo_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
    // @@protoc_insertion_point(field_set_char:google.protobuf.testing.maps.MapM.foo)
  }
   void MapM::set_foo(const char* value, size_t size) {
    
    foo_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
        ::std::string(reinterpret_cast<const char*>(value), size));
    // @@protoc_insertion_point(field_set_pointer:google.protobuf.testing.maps.MapM.foo)
  }
   ::std::string* MapM::mutable_foo() {
    
    // @@protoc_insertion_point(field_mutable:google.protobuf.testing.maps.MapM.foo)
    return foo_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   ::std::string* MapM::release_foo() {
    
    return foo_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  }
   void MapM::set_allocated_foo(::std::string* foo) {
    if (foo != NULL) {
      
    } else {
      
    }
    foo_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), foo);
    // @@protoc_insertion_point(field_set_allocated:google.protobuf.testing.maps.MapM.foo)
  }
  
  #endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
  
  // @@protoc_insertion_point(namespace_scope)
  
  }  // namespace maps
  }  // namespace testing
  }  // namespace protobuf
  }  // namespace google
  
  // @@protoc_insertion_point(global_scope)
  