// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/protobuf/util/internal/testdata/books.proto

#include <google/protobuf/util/internal/testdata/books.pb.h>

#include <algorithm>

#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/port.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>
// This is a temporary google only hack
#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
#include "third_party/protobuf/version.h"
#endif
// @@protoc_insertion_point(includes)

namespace protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Author;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Book_Data;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Book_Label;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Publisher;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_NestedBook;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Cyclic;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_Book;
}  // namespace protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto
namespace google {
namespace protobuf {
namespace testing {
class Book_DataDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Book_Data>
      _instance;
} _Book_Data_default_instance_;
class Book_LabelDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Book_Label>
      _instance;
} _Book_Label_default_instance_;
class BookDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Book>
      _instance;
} _Book_default_instance_;
class PublisherDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Publisher>
      _instance;
} _Publisher_default_instance_;
class AuthorDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Author>
      _instance;
} _Author_default_instance_;
class BadAuthorDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<BadAuthor>
      _instance;
} _BadAuthor_default_instance_;
class PrimitiveDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Primitive>
      _instance;
} _Primitive_default_instance_;
class PackedPrimitiveDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<PackedPrimitive>
      _instance;
} _PackedPrimitive_default_instance_;
class NestedBookDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<NestedBook>
      _instance;
} _NestedBook_default_instance_;
class BadNestedBookDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<BadNestedBook>
      _instance;
} _BadNestedBook_default_instance_;
class CyclicDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Cyclic>
      _instance;
} _Cyclic_default_instance_;
class TestJsonName1DefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestJsonName1>
      _instance;
} _TestJsonName1_default_instance_;
class TestJsonName2DefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestJsonName2>
      _instance;
} _TestJsonName2_default_instance_;
}  // namespace testing
}  // namespace protobuf
}  // namespace google
namespace protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto {
static void InitDefaultsBook_Data() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Book_Data_default_instance_;
    new (ptr) ::google::protobuf::testing::Book_Data();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Book_Data::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_Book_Data =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsBook_Data}, {}};

static void InitDefaultsBook_Label() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Book_Label_default_instance_;
    new (ptr) ::google::protobuf::testing::Book_Label();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Book_Label::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_Book_Label =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsBook_Label}, {}};

static void InitDefaultsBook() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Book_default_instance_;
    new (ptr) ::google::protobuf::testing::Book();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Book::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<4> scc_info_Book =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 4, InitDefaultsBook}, {
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Author.base,
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book_Data.base,
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Publisher.base,
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book_Label.base,}};

static void InitDefaultsPublisher() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Publisher_default_instance_;
    new (ptr) ::google::protobuf::testing::Publisher();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Publisher::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_Publisher =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPublisher}, {}};

static void InitDefaultsAuthor() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Author_default_instance_;
    new (ptr) ::google::protobuf::testing::Author();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Author::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_Author =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsAuthor}, {}};

static void InitDefaultsBadAuthor() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_BadAuthor_default_instance_;
    new (ptr) ::google::protobuf::testing::BadAuthor();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::BadAuthor::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_BadAuthor =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsBadAuthor}, {}};

static void InitDefaultsPrimitive() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Primitive_default_instance_;
    new (ptr) ::google::protobuf::testing::Primitive();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Primitive::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_Primitive =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPrimitive}, {}};

static void InitDefaultsPackedPrimitive() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_PackedPrimitive_default_instance_;
    new (ptr) ::google::protobuf::testing::PackedPrimitive();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::PackedPrimitive::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_PackedPrimitive =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPackedPrimitive}, {}};

static void InitDefaultsNestedBook() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_NestedBook_default_instance_;
    new (ptr) ::google::protobuf::testing::NestedBook();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::NestedBook::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_NestedBook =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsNestedBook}, {
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book.base,}};

static void InitDefaultsBadNestedBook() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_BadNestedBook_default_instance_;
    new (ptr) ::google::protobuf::testing::BadNestedBook();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::BadNestedBook::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_BadNestedBook =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsBadNestedBook}, {}};

static void InitDefaultsCyclic() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_Cyclic_default_instance_;
    new (ptr) ::google::protobuf::testing::Cyclic();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::Cyclic::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<2> scc_info_Cyclic =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsCyclic}, {
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book.base,
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Author.base,}};

static void InitDefaultsTestJsonName1() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_TestJsonName1_default_instance_;
    new (ptr) ::google::protobuf::testing::TestJsonName1();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::TestJsonName1::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestJsonName1 =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestJsonName1}, {}};

static void InitDefaultsTestJsonName2() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::protobuf::testing::_TestJsonName2_default_instance_;
    new (ptr) ::google::protobuf::testing::TestJsonName2();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::protobuf::testing::TestJsonName2::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestJsonName2 =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestJsonName2}, {}};

void InitDefaults() {
  ::google::protobuf::internal::InitSCC(&scc_info_Book_Data.base);
  ::google::protobuf::internal::InitSCC(&scc_info_Book_Label.base);
  ::google::protobuf::internal::InitSCC(&scc_info_Book.base);
  ::google::protobuf::internal::InitSCC(&scc_info_Publisher.base);
  ::google::protobuf::internal::InitSCC(&scc_info_Author.base);
  ::google::protobuf::internal::InitSCC(&scc_info_BadAuthor.base);
  ::google::protobuf::internal::InitSCC(&scc_info_Primitive.base);
  ::google::protobuf::internal::InitSCC(&scc_info_PackedPrimitive.base);
  ::google::protobuf::internal::InitSCC(&scc_info_NestedBook.base);
  ::google::protobuf::internal::InitSCC(&scc_info_BadNestedBook.base);
  ::google::protobuf::internal::InitSCC(&scc_info_Cyclic.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestJsonName1.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestJsonName2.base);
}

::google::protobuf::Metadata file_level_metadata[13];
const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[1];

const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Data, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Data, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Data, year_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Data, copyright_),
  1,
  0,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Label, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Label, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Label, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book_Label, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, _internal_metadata_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, _extensions_),
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, title_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, author_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, length_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, published_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, content_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, data_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, publisher_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, labels_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Book, type_),
  0,
  2,
  6,
  5,
  1,
  3,
  4,
  ~0u,
  7,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Publisher, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Publisher, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Publisher, name_),
  0,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, id_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, name_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, pseudonym_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, alive_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Author, friend__),
  1,
  0,
  ~0u,
  2,
  ~0u,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadAuthor, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadAuthor, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadAuthor, id_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadAuthor, name_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadAuthor, pseudonym_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadAuthor, alive_),
  0,
  ~0u,
  1,
  ~0u,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, fix32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, u32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, i32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, sf32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, s32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, fix64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, u64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, i64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, sf64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, s64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, str_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, bytes_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, float__),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, double__),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, bool__),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_fix32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_u32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_i32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_sf32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_s32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_fix64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_u64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_i64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_sf64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_s64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_str_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_bytes_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_float_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_double_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Primitive, rep_bool_),
  2,
  3,
  4,
  5,
  10,
  6,
  7,
  8,
  9,
  12,
  0,
  1,
  11,
  13,
  14,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_fix32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_u32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_i32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_sf32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_s32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_fix64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_u64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_i64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_sf64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_s64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_float_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_double_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::PackedPrimitive, rep_bool_),
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  ~0u,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::NestedBook, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::NestedBook, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::NestedBook, book_),
  0,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadNestedBook, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadNestedBook, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::BadNestedBook, book_),
  ~0u,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, m_int_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, m_str_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, m_book_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, m_author_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::Cyclic, m_cyclic_),
  3,
  0,
  1,
  ~0u,
  2,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::TestJsonName1, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::TestJsonName1, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::TestJsonName1, one_value_),
  0,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::TestJsonName2, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::TestJsonName2, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::protobuf::testing::TestJsonName2, another_value_),
  0,
};
static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  { 0, 7, sizeof(::google::protobuf::testing::Book_Data)},
  { 9, 16, sizeof(::google::protobuf::testing::Book_Label)},
  { 18, 32, sizeof(::google::protobuf::testing::Book)},
  { 41, 47, sizeof(::google::protobuf::testing::Publisher)},
  { 48, 58, sizeof(::google::protobuf::testing::Author)},
  { 63, 72, sizeof(::google::protobuf::testing::BadAuthor)},
  { 76, 111, sizeof(::google::protobuf::testing::Primitive)},
  { 141, 159, sizeof(::google::protobuf::testing::PackedPrimitive)},
  { 172, 178, sizeof(::google::protobuf::testing::NestedBook)},
  { 179, 185, sizeof(::google::protobuf::testing::BadNestedBook)},
  { 186, 196, sizeof(::google::protobuf::testing::Cyclic)},
  { 201, 207, sizeof(::google::protobuf::testing::TestJsonName1)},
  { 208, 214, sizeof(::google::protobuf::testing::TestJsonName2)},
};

static ::google::protobuf::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Book_Data_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Book_Label_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Book_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Publisher_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Author_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_BadAuthor_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Primitive_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_PackedPrimitive_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_NestedBook_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_BadNestedBook_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_Cyclic_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_TestJsonName1_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::protobuf::testing::_TestJsonName2_default_instance_),
};

void protobuf_AssignDescriptors() {
  AddDescriptors();
  AssignDescriptors(
      "google/protobuf/util/internal/testdata/books.proto", schemas, file_default_instances, TableStruct::offsets,
      file_level_metadata, file_level_enum_descriptors, NULL);
}

void protobuf_AssignDescriptorsOnce() {
  static ::google::protobuf::internal::once_flag once;
  ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors);
}

void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
void protobuf_RegisterTypes(const ::std::string&) {
  protobuf_AssignDescriptorsOnce();
  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 13);
}

void AddDescriptorsImpl() {
  InitDefaults();
  static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
      "\n2google/protobuf/util/internal/testdata"
      "/books.proto\022\027google.protobuf.testing\"\202\004"
      "\n\004Book\022\r\n\005title\030\001 \001(\t\022/\n\006author\030\002 \001(\0132\037."
      "google.protobuf.testing.Author\022\016\n\006length"
      "\030\003 \001(\r\022\021\n\tpublished\030\004 \001(\003\022\017\n\007content\030\005 \001"
      "(\014\0220\n\004data\030\006 \001(\n2\".google.protobuf.testi"
      "ng.Book.Data\0225\n\tpublisher\030\t \001(\0132\".google"
      ".protobuf.testing.Publisher\0223\n\006labels\030\n "
      "\003(\0132#.google.protobuf.testing.Book.Label"
      "\0220\n\004type\030\013 \001(\0162\".google.protobuf.testing"
      ".Book.Type\032\'\n\004Data\022\014\n\004year\030\007 \001(\r\022\021\n\tcopy"
      "right\030\010 \001(\t\032#\n\005Label\022\013\n\003key\030\001 \001(\t\022\r\n\005val"
      "ue\030\002 \001(\t\"`\n\004Type\022\013\n\007FICTION\020\001\022\010\n\004KIDS\020\002\022"
      "\030\n\024ACTION_AND_ADVENTURE\020\003\022\030\n\024arts_and_ph"
      "otography\020\004\022\r\n\tI18N_Tech\020\005*\006\010\310\001\020\364\003\"\031\n\tPu"
      "blisher\022\014\n\004name\030\001 \002(\t\"z\n\006Author\022\017\n\002id\030\001 "
      "\001(\004R\003@id\022\014\n\004name\030\002 \001(\t\022\021\n\tpseudonym\030\003 \003("
      "\t\022\r\n\005alive\030\004 \001(\010\022/\n\006friend\030\005 \003(\0132\037.googl"
      "e.protobuf.testing.Author\"K\n\tBadAuthor\022\n"
      "\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \003(\004\022\021\n\tpseudonym\030\003 "
      "\001(\t\022\021\n\005alive\030\004 \003(\010B\002\020\001\"\351\003\n\tPrimitive\022\r\n\005"
      "fix32\030\001 \001(\007\022\013\n\003u32\030\002 \001(\r\022\013\n\003i32\030\003 \001(\005\022\014\n"
      "\004sf32\030\004 \001(\017\022\013\n\003s32\030\005 \001(\021\022\r\n\005fix64\030\006 \001(\006\022"
      "\013\n\003u64\030\007 \001(\004\022\013\n\003i64\030\010 \001(\003\022\014\n\004sf64\030\t \001(\020\022"
      "\013\n\003s64\030\n \001(\022\022\013\n\003str\030\013 \001(\t\022\r\n\005bytes\030\014 \001(\014"
      "\022\r\n\005float\030\r \001(\002\022\016\n\006double\030\016 \001(\001\022\014\n\004bool\030"
      "\017 \001(\010\022\021\n\trep_fix32\030\020 \003(\007\022\017\n\007rep_u32\030\021 \003("
      "\r\022\017\n\007rep_i32\030\022 \003(\005\022\020\n\010rep_sf32\030\023 \003(\017\022\017\n\007"
      "rep_s32\030\024 \003(\021\022\021\n\trep_fix64\030\025 \003(\006\022\017\n\007rep_"
      "u64\030\026 \003(\004\022\017\n\007rep_i64\030\027 \003(\003\022\020\n\010rep_sf64\030\030"
      " \003(\020\022\017\n\007rep_s64\030\031 \003(\022\022\017\n\007rep_str\030\032 \003(\t\022\021"
      "\n\trep_bytes\030\033 \003(\014\022\021\n\trep_float\030\034 \003(\002\022\022\n\n"
      "rep_double\030\035 \003(\001\022\020\n\010rep_bool\030\036 \003(\010\"\256\002\n\017P"
      "ackedPrimitive\022\025\n\trep_fix32\030\020 \003(\007B\002\020\001\022\023\n"
      "\007rep_u32\030\021 \003(\rB\002\020\001\022\023\n\007rep_i32\030\022 \003(\005B\002\020\001\022"
      "\024\n\010rep_sf32\030\023 \003(\017B\002\020\001\022\023\n\007rep_s32\030\024 \003(\021B\002"
      "\020\001\022\025\n\trep_fix64\030\025 \003(\006B\002\020\001\022\023\n\007rep_u64\030\026 \003"
      "(\004B\002\020\001\022\023\n\007rep_i64\030\027 \003(\003B\002\020\001\022\024\n\010rep_sf64\030"
      "\030 \003(\020B\002\020\001\022\023\n\007rep_s64\030\031 \003(\022B\002\020\001\022\025\n\trep_fl"
      "oat\030\034 \003(\002B\002\020\001\022\026\n\nrep_double\030\035 \003(\001B\002\020\001\022\024\n"
      "\010rep_bool\030\036 \003(\010B\002\020\001\"\224\001\n\nNestedBook\022+\n\004bo"
      "ok\030\001 \001(\0132\035.google.protobuf.testing.Book2"
      "Y\n\014another_book\022\035.google.protobuf.testin"
      "g.Book\030\255\002 \001(\0132#.google.protobuf.testing."
      "NestedBook\"!\n\rBadNestedBook\022\020\n\004book\030\001 \003("
      "\rB\002\020\001\"\273\001\n\006Cyclic\022\r\n\005m_int\030\001 \001(\005\022\r\n\005m_str"
      "\030\002 \001(\t\022-\n\006m_book\030\003 \001(\0132\035.google.protobuf"
      ".testing.Book\0221\n\010m_author\030\005 \003(\0132\037.google"
      ".protobuf.testing.Author\0221\n\010m_cyclic\030\004 \001"
      "(\0132\037.google.protobuf.testing.Cyclic\")\n\rT"
      "estJsonName1\022\030\n\tone_value\030\001 \001(\005R\005value\"-"
      "\n\rTestJsonName2\022\034\n\ranother_value\030\001 \001(\005R\005"
      "value:T\n\013more_author\022\035.google.protobuf.t"
      "esting.Book\030\311\001 \003(\0132\037.google.protobuf.tes"
      "ting.Author"
  };
  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      descriptor, 2171);
  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
    "google/protobuf/util/internal/testdata/books.proto", &protobuf_RegisterTypes);
}

void AddDescriptors() {
  static ::google::protobuf::internal::once_flag once;
  ::google::protobuf::internal::call_once(once, AddDescriptorsImpl);
}
// Force AddDescriptors() to be called at dynamic initialization time.
struct StaticDescriptorInitializer {
  StaticDescriptorInitializer() {
    AddDescriptors();
  }
} static_descriptor_initializer;
}  // namespace protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto
namespace google {
namespace protobuf {
namespace testing {
const ::google::protobuf::EnumDescriptor* Book_Type_descriptor() {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_enum_descriptors[0];
}
bool Book_Type_IsValid(int value) {
  switch (value) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      return true;
    default:
      return false;
  }
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const Book_Type Book::FICTION;
const Book_Type Book::KIDS;
const Book_Type Book::ACTION_AND_ADVENTURE;
const Book_Type Book::arts_and_photography;
const Book_Type Book::I18N_Tech;
const Book_Type Book::Type_MIN;
const Book_Type Book::Type_MAX;
const int Book::Type_ARRAYSIZE;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

// ===================================================================

void Book_Data::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Book_Data::kYearFieldNumber;
const int Book_Data::kCopyrightFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Book_Data::Book_Data()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book_Data.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Book.Data)
}
Book_Data::Book_Data(const Book_Data& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  copyright_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_copyright()) {
    copyright_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.copyright_);
  }
  year_ = from.year_;
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Book.Data)
}

void Book_Data::SharedCtor() {
  copyright_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  year_ = 0u;
}

Book_Data::~Book_Data() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Book.Data)
  SharedDtor();
}

void Book_Data::SharedDtor() {
  copyright_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void Book_Data::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Book_Data::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Book_Data& Book_Data::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book_Data.base);
  return *internal_default_instance();
}


void Book_Data::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Book.Data)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    copyright_.ClearNonDefaultToEmptyNoArena();
  }
  year_ = 0u;
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Book_Data::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Book.Data)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional uint32 year = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(56u /* 56 & 0xFF */)) {
          set_has_year();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &year_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional string copyright = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_copyright()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->copyright().data(), static_cast<int>(this->copyright().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Book.Data.copyright");
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0 ||
            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
          input->SetLastTag(tag);
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Book.Data)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Book.Data)
  return false;
#undef DO_
}

void Book_Data::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Book.Data)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional uint32 year = 7;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(7, this->year(), output);
  }

  // optional string copyright = 8;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->copyright().data(), static_cast<int>(this->copyright().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.Data.copyright");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      8, this->copyright(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Book.Data)
}

::google::protobuf::uint8* Book_Data::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Book.Data)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional uint32 year = 7;
  if (cached_has_bits & 0x00000002u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(7, this->year(), target);
  }

  // optional string copyright = 8;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->copyright().data(), static_cast<int>(this->copyright().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.Data.copyright");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        8, this->copyright(), target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Book.Data)
  return target;
}

size_t Book_Data::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Book.Data)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  if (_has_bits_[0 / 32] & 3u) {
    // optional string copyright = 8;
    if (has_copyright()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->copyright());
    }

    // optional uint32 year = 7;
    if (has_year()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt32Size(
          this->year());
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Book_Data::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Book.Data)
  GOOGLE_DCHECK_NE(&from, this);
  const Book_Data* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Book_Data>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Book.Data)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Book.Data)
    MergeFrom(*source);
  }
}

void Book_Data::MergeFrom(const Book_Data& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Book.Data)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 3u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_copyright();
      copyright_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.copyright_);
    }
    if (cached_has_bits & 0x00000002u) {
      year_ = from.year_;
    }
    _has_bits_[0] |= cached_has_bits;
  }
}

void Book_Data::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Book.Data)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Book_Data::CopyFrom(const Book_Data& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Book.Data)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Book_Data::IsInitialized() const {
  return true;
}

void Book_Data::Swap(Book_Data* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Book_Data::InternalSwap(Book_Data* other) {
  using std::swap;
  copyright_.Swap(&other->copyright_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(year_, other->year_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata Book_Data::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Book_Label::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Book_Label::kKeyFieldNumber;
const int Book_Label::kValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Book_Label::Book_Label()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book_Label.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Book.Label)
}
Book_Label::Book_Label(const Book_Label& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  key_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_key()) {
    key_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.key_);
  }
  value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_value()) {
    value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.value_);
  }
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Book.Label)
}

void Book_Label::SharedCtor() {
  key_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

Book_Label::~Book_Label() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Book.Label)
  SharedDtor();
}

void Book_Label::SharedDtor() {
  key_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  value_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void Book_Label::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Book_Label::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Book_Label& Book_Label::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book_Label.base);
  return *internal_default_instance();
}


void Book_Label::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Book.Label)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 3u) {
    if (cached_has_bits & 0x00000001u) {
      key_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000002u) {
      value_.ClearNonDefaultToEmptyNoArena();
    }
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Book_Label::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Book.Label)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional string key = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_key()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->key().data(), static_cast<int>(this->key().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Book.Label.key");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional string value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_value()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->value().data(), static_cast<int>(this->value().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Book.Label.value");
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Book.Label)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Book.Label)
  return false;
#undef DO_
}

void Book_Label::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Book.Label)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional string key = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->key().data(), static_cast<int>(this->key().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.Label.key");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      1, this->key(), output);
  }

  // optional string value = 2;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->value().data(), static_cast<int>(this->value().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.Label.value");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      2, this->value(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Book.Label)
}

::google::protobuf::uint8* Book_Label::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Book.Label)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional string key = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->key().data(), static_cast<int>(this->key().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.Label.key");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        1, this->key(), target);
  }

  // optional string value = 2;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->value().data(), static_cast<int>(this->value().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.Label.value");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        2, this->value(), target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Book.Label)
  return target;
}

size_t Book_Label::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Book.Label)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  if (_has_bits_[0 / 32] & 3u) {
    // optional string key = 1;
    if (has_key()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->key());
    }

    // optional string value = 2;
    if (has_value()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->value());
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Book_Label::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Book.Label)
  GOOGLE_DCHECK_NE(&from, this);
  const Book_Label* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Book_Label>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Book.Label)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Book.Label)
    MergeFrom(*source);
  }
}

void Book_Label::MergeFrom(const Book_Label& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Book.Label)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 3u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_key();
      key_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.key_);
    }
    if (cached_has_bits & 0x00000002u) {
      set_has_value();
      value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.value_);
    }
  }
}

void Book_Label::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Book.Label)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Book_Label::CopyFrom(const Book_Label& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Book.Label)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Book_Label::IsInitialized() const {
  return true;
}

void Book_Label::Swap(Book_Label* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Book_Label::InternalSwap(Book_Label* other) {
  using std::swap;
  key_.Swap(&other->key_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  value_.Swap(&other->value_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata Book_Label::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Book::InitAsDefaultInstance() {
  ::google::protobuf::testing::_Book_default_instance_._instance.get_mutable()->author_ = const_cast< ::google::protobuf::testing::Author*>(
      ::google::protobuf::testing::Author::internal_default_instance());
  ::google::protobuf::testing::_Book_default_instance_._instance.get_mutable()->data_ = const_cast< ::google::protobuf::testing::Book_Data*>(
      ::google::protobuf::testing::Book_Data::internal_default_instance());
  ::google::protobuf::testing::_Book_default_instance_._instance.get_mutable()->publisher_ = const_cast< ::google::protobuf::testing::Publisher*>(
      ::google::protobuf::testing::Publisher::internal_default_instance());
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Book::kTitleFieldNumber;
const int Book::kAuthorFieldNumber;
const int Book::kLengthFieldNumber;
const int Book::kPublishedFieldNumber;
const int Book::kContentFieldNumber;
const int Book::kDataFieldNumber;
const int Book::kPublisherFieldNumber;
const int Book::kLabelsFieldNumber;
const int Book::kTypeFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Book::Book()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Book)
}
Book::Book(const Book& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      labels_(from.labels_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  _extensions_.MergeFrom(from._extensions_);
  title_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_title()) {
    title_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.title_);
  }
  content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_content()) {
    content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_);
  }
  if (from.has_author()) {
    author_ = new ::google::protobuf::testing::Author(*from.author_);
  } else {
    author_ = NULL;
  }
  if (from.has_data()) {
    data_ = new ::google::protobuf::testing::Book_Data(*from.data_);
  } else {
    data_ = NULL;
  }
  if (from.has_publisher()) {
    publisher_ = new ::google::protobuf::testing::Publisher(*from.publisher_);
  } else {
    publisher_ = NULL;
  }
  ::memcpy(&published_, &from.published_,
    static_cast<size_t>(reinterpret_cast<char*>(&type_) -
    reinterpret_cast<char*>(&published_)) + sizeof(type_));
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Book)
}

void Book::SharedCtor() {
  title_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::memset(&author_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&length_) -
      reinterpret_cast<char*>(&author_)) + sizeof(length_));
  type_ = 1;
}

Book::~Book() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Book)
  SharedDtor();
}

void Book::SharedDtor() {
  title_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  content_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete author_;
  if (this != internal_default_instance()) delete data_;
  if (this != internal_default_instance()) delete publisher_;
}

void Book::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Book::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Book& Book::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Book.base);
  return *internal_default_instance();
}


void Book::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Book)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _extensions_.Clear();
  labels_.Clear();
  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 31u) {
    if (cached_has_bits & 0x00000001u) {
      title_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000002u) {
      content_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000004u) {
      GOOGLE_DCHECK(author_ != NULL);
      author_->Clear();
    }
    if (cached_has_bits & 0x00000008u) {
      GOOGLE_DCHECK(data_ != NULL);
      data_->Clear();
    }
    if (cached_has_bits & 0x00000010u) {
      GOOGLE_DCHECK(publisher_ != NULL);
      publisher_->Clear();
    }
  }
  if (cached_has_bits & 224u) {
    ::memset(&published_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&length_) -
        reinterpret_cast<char*>(&published_)) + sizeof(length_));
    type_ = 1;
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Book::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Book)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional string title = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_title()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->title().data(), static_cast<int>(this->title().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Book.title");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional .google.protobuf.testing.Author author = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_author()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional uint32 length = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
          set_has_length();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &length_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional int64 published = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
          set_has_published();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, &published_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional bytes content = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->mutable_content()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional group Data = 6 { ... };
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(51u /* 51 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadGroup(
                6, input, mutable_data()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional .google.protobuf.testing.Publisher publisher = 9;
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(74u /* 74 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_publisher()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.testing.Book.Label labels = 10;
      case 10: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(82u /* 82 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_labels()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional .google.protobuf.testing.Book.Type type = 11;
      case 11: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(88u /* 88 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          if (::google::protobuf::testing::Book_Type_IsValid(value)) {
            set_type(static_cast< ::google::protobuf::testing::Book_Type >(value));
          } else {
            mutable_unknown_fields()->AddVarint(
                11, static_cast< ::google::protobuf::uint64>(value));
          }
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        if ((1600u <= tag && tag < 4000u)) {
          DO_(_extensions_.ParseField(tag, input,
              internal_default_instance(),
              _internal_metadata_.mutable_unknown_fields()));
          continue;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Book)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Book)
  return false;
#undef DO_
}

void Book::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Book)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional string title = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->title().data(), static_cast<int>(this->title().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.title");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      1, this->title(), output);
  }

  // optional .google.protobuf.testing.Author author = 2;
  if (cached_has_bits & 0x00000004u) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, this->_internal_author(), output);
  }

  // optional uint32 length = 3;
  if (cached_has_bits & 0x00000040u) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(3, this->length(), output);
  }

  // optional int64 published = 4;
  if (cached_has_bits & 0x00000020u) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(4, this->published(), output);
  }

  // optional bytes content = 5;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
      5, this->content(), output);
  }

  // optional group Data = 6 { ... };
  if (cached_has_bits & 0x00000008u) {
    ::google::protobuf::internal::WireFormatLite::WriteGroupMaybeToArray(
      6, this->_internal_data(), output);
  }

  // optional .google.protobuf.testing.Publisher publisher = 9;
  if (cached_has_bits & 0x00000010u) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      9, this->_internal_publisher(), output);
  }

  // repeated .google.protobuf.testing.Book.Label labels = 10;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->labels_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      10,
      this->labels(static_cast<int>(i)),
      output);
  }

  // optional .google.protobuf.testing.Book.Type type = 11;
  if (cached_has_bits & 0x00000080u) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      11, this->type(), output);
  }

  // Extension range [200, 500)
  _extensions_.SerializeWithCachedSizes(
      200, 500, output);

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Book)
}

::google::protobuf::uint8* Book::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Book)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional string title = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->title().data(), static_cast<int>(this->title().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Book.title");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        1, this->title(), target);
  }

  // optional .google.protobuf.testing.Author author = 2;
  if (cached_has_bits & 0x00000004u) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->_internal_author(), deterministic, target);
  }

  // optional uint32 length = 3;
  if (cached_has_bits & 0x00000040u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(3, this->length(), target);
  }

  // optional int64 published = 4;
  if (cached_has_bits & 0x00000020u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(4, this->published(), target);
  }

  // optional bytes content = 5;
  if (cached_has_bits & 0x00000002u) {
    target =
      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
        5, this->content(), target);
  }

  // optional group Data = 6 { ... };
  if (cached_has_bits & 0x00000008u) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteGroupToArray(
        6, this->_internal_data(), deterministic, target);
  }

  // optional .google.protobuf.testing.Publisher publisher = 9;
  if (cached_has_bits & 0x00000010u) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        9, this->_internal_publisher(), deterministic, target);
  }

  // repeated .google.protobuf.testing.Book.Label labels = 10;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->labels_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        10, this->labels(static_cast<int>(i)), deterministic, target);
  }

  // optional .google.protobuf.testing.Book.Type type = 11;
  if (cached_has_bits & 0x00000080u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      11, this->type(), target);
  }

  // Extension range [200, 500)
  target = _extensions_.InternalSerializeWithCachedSizesToArray(
      200, 500, deterministic, target);

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Book)
  return target;
}

size_t Book::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Book)
  size_t total_size = 0;

  total_size += _extensions_.ByteSize();

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated .google.protobuf.testing.Book.Label labels = 10;
  {
    unsigned int count = static_cast<unsigned int>(this->labels_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->labels(static_cast<int>(i)));
    }
  }

  if (_has_bits_[0 / 32] & 255u) {
    // optional string title = 1;
    if (has_title()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->title());
    }

    // optional bytes content = 5;
    if (has_content()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::BytesSize(
          this->content());
    }

    // optional .google.protobuf.testing.Author author = 2;
    if (has_author()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *author_);
    }

    // optional group Data = 6 { ... };
    if (has_data()) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::GroupSize(
          *data_);
    }

    // optional .google.protobuf.testing.Publisher publisher = 9;
    if (has_publisher()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *publisher_);
    }

    // optional int64 published = 4;
    if (has_published()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int64Size(
          this->published());
    }

    // optional uint32 length = 3;
    if (has_length()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt32Size(
          this->length());
    }

    // optional .google.protobuf.testing.Book.Type type = 11;
    if (has_type()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Book::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Book)
  GOOGLE_DCHECK_NE(&from, this);
  const Book* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Book>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Book)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Book)
    MergeFrom(*source);
  }
}

void Book::MergeFrom(const Book& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Book)
  GOOGLE_DCHECK_NE(&from, this);
  _extensions_.MergeFrom(from._extensions_);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  labels_.MergeFrom(from.labels_);
  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 255u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_title();
      title_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.title_);
    }
    if (cached_has_bits & 0x00000002u) {
      set_has_content();
      content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_);
    }
    if (cached_has_bits & 0x00000004u) {
      mutable_author()->::google::protobuf::testing::Author::MergeFrom(from.author());
    }
    if (cached_has_bits & 0x00000008u) {
      mutable_data()->::google::protobuf::testing::Book_Data::MergeFrom(from.data());
    }
    if (cached_has_bits & 0x00000010u) {
      mutable_publisher()->::google::protobuf::testing::Publisher::MergeFrom(from.publisher());
    }
    if (cached_has_bits & 0x00000020u) {
      published_ = from.published_;
    }
    if (cached_has_bits & 0x00000040u) {
      length_ = from.length_;
    }
    if (cached_has_bits & 0x00000080u) {
      type_ = from.type_;
    }
    _has_bits_[0] |= cached_has_bits;
  }
}

void Book::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Book)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Book::CopyFrom(const Book& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Book)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Book::IsInitialized() const {
  if (!_extensions_.IsInitialized()) {
    return false;
  }

  if (has_publisher()) {
    if (!this->publisher_->IsInitialized()) return false;
  }
  return true;
}

void Book::Swap(Book* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Book::InternalSwap(Book* other) {
  using std::swap;
  CastToBase(&labels_)->InternalSwap(CastToBase(&other->labels_));
  title_.Swap(&other->title_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  content_.Swap(&other->content_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(author_, other->author_);
  swap(data_, other->data_);
  swap(publisher_, other->publisher_);
  swap(published_, other->published_);
  swap(length_, other->length_);
  swap(type_, other->type_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  _extensions_.Swap(&other->_extensions_);
}

::google::protobuf::Metadata Book::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Publisher::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Publisher::kNameFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Publisher::Publisher()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Publisher.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Publisher)
}
Publisher::Publisher(const Publisher& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_name()) {
    name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Publisher)
}

void Publisher::SharedCtor() {
  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

Publisher::~Publisher() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Publisher)
  SharedDtor();
}

void Publisher::SharedDtor() {
  name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void Publisher::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Publisher::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Publisher& Publisher::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Publisher.base);
  return *internal_default_instance();
}


void Publisher::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Publisher)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    name_.ClearNonDefaultToEmptyNoArena();
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Publisher::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Publisher)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // required string name = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_name()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->name().data(), static_cast<int>(this->name().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Publisher.name");
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Publisher)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Publisher)
  return false;
#undef DO_
}

void Publisher::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Publisher)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // required string name = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->name().data(), static_cast<int>(this->name().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Publisher.name");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      1, this->name(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Publisher)
}

::google::protobuf::uint8* Publisher::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Publisher)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // required string name = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->name().data(), static_cast<int>(this->name().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Publisher.name");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        1, this->name(), target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Publisher)
  return target;
}

size_t Publisher::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Publisher)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // required string name = 1;
  if (has_name()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->name());
  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Publisher::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Publisher)
  GOOGLE_DCHECK_NE(&from, this);
  const Publisher* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Publisher>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Publisher)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Publisher)
    MergeFrom(*source);
  }
}

void Publisher::MergeFrom(const Publisher& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Publisher)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_name()) {
    set_has_name();
    name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
}

void Publisher::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Publisher)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Publisher::CopyFrom(const Publisher& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Publisher)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Publisher::IsInitialized() const {
  if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
  return true;
}

void Publisher::Swap(Publisher* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Publisher::InternalSwap(Publisher* other) {
  using std::swap;
  name_.Swap(&other->name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata Publisher::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Author::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Author::kIdFieldNumber;
const int Author::kNameFieldNumber;
const int Author::kPseudonymFieldNumber;
const int Author::kAliveFieldNumber;
const int Author::kFriendFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Author::Author()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Author.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Author)
}
Author::Author(const Author& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      pseudonym_(from.pseudonym_),
      friend__(from.friend__) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_name()) {
    name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  ::memcpy(&id_, &from.id_,
    static_cast<size_t>(reinterpret_cast<char*>(&alive_) -
    reinterpret_cast<char*>(&id_)) + sizeof(alive_));
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Author)
}

void Author::SharedCtor() {
  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::memset(&id_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&alive_) -
      reinterpret_cast<char*>(&id_)) + sizeof(alive_));
}

Author::~Author() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Author)
  SharedDtor();
}

void Author::SharedDtor() {
  name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void Author::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Author::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Author& Author::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Author.base);
  return *internal_default_instance();
}


void Author::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Author)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  pseudonym_.Clear();
  friend__.Clear();
  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    name_.ClearNonDefaultToEmptyNoArena();
  }
  if (cached_has_bits & 6u) {
    ::memset(&id_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&alive_) -
        reinterpret_cast<char*>(&id_)) + sizeof(alive_));
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Author::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Author)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional uint64 id = 1[json_name = "@id"];
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          set_has_id();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, &id_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional string name = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_name()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->name().data(), static_cast<int>(this->name().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Author.name");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated string pseudonym = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->add_pseudonym()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->pseudonym(this->pseudonym_size() - 1).data(),
            static_cast<int>(this->pseudonym(this->pseudonym_size() - 1).length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Author.pseudonym");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional bool alive = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
          set_has_alive();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &alive_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.testing.Author friend = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_friend_()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Author)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Author)
  return false;
#undef DO_
}

void Author::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Author)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional uint64 id = 1[json_name = "@id"];
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->id(), output);
  }

  // optional string name = 2;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->name().data(), static_cast<int>(this->name().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Author.name");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      2, this->name(), output);
  }

  // repeated string pseudonym = 3;
  for (int i = 0, n = this->pseudonym_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->pseudonym(i).data(), static_cast<int>(this->pseudonym(i).length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Author.pseudonym");
    ::google::protobuf::internal::WireFormatLite::WriteString(
      3, this->pseudonym(i), output);
  }

  // optional bool alive = 4;
  if (cached_has_bits & 0x00000004u) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->alive(), output);
  }

  // repeated .google.protobuf.testing.Author friend = 5;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->friend__size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      5,
      this->friend_(static_cast<int>(i)),
      output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Author)
}

::google::protobuf::uint8* Author::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Author)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional uint64 id = 1[json_name = "@id"];
  if (cached_has_bits & 0x00000002u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->id(), target);
  }

  // optional string name = 2;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->name().data(), static_cast<int>(this->name().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Author.name");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        2, this->name(), target);
  }

  // repeated string pseudonym = 3;
  for (int i = 0, n = this->pseudonym_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->pseudonym(i).data(), static_cast<int>(this->pseudonym(i).length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Author.pseudonym");
    target = ::google::protobuf::internal::WireFormatLite::
      WriteStringToArray(3, this->pseudonym(i), target);
  }

  // optional bool alive = 4;
  if (cached_has_bits & 0x00000004u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->alive(), target);
  }

  // repeated .google.protobuf.testing.Author friend = 5;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->friend__size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        5, this->friend_(static_cast<int>(i)), deterministic, target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Author)
  return target;
}

size_t Author::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Author)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated string pseudonym = 3;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->pseudonym_size());
  for (int i = 0, n = this->pseudonym_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
      this->pseudonym(i));
  }

  // repeated .google.protobuf.testing.Author friend = 5;
  {
    unsigned int count = static_cast<unsigned int>(this->friend__size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->friend_(static_cast<int>(i)));
    }
  }

  if (_has_bits_[0 / 32] & 7u) {
    // optional string name = 2;
    if (has_name()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->name());
    }

    // optional uint64 id = 1[json_name = "@id"];
    if (has_id()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt64Size(
          this->id());
    }

    // optional bool alive = 4;
    if (has_alive()) {
      total_size += 1 + 1;
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Author::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Author)
  GOOGLE_DCHECK_NE(&from, this);
  const Author* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Author>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Author)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Author)
    MergeFrom(*source);
  }
}

void Author::MergeFrom(const Author& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Author)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  pseudonym_.MergeFrom(from.pseudonym_);
  friend__.MergeFrom(from.friend__);
  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 7u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_name();
      name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
    }
    if (cached_has_bits & 0x00000002u) {
      id_ = from.id_;
    }
    if (cached_has_bits & 0x00000004u) {
      alive_ = from.alive_;
    }
    _has_bits_[0] |= cached_has_bits;
  }
}

void Author::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Author)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Author::CopyFrom(const Author& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Author)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Author::IsInitialized() const {
  return true;
}

void Author::Swap(Author* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Author::InternalSwap(Author* other) {
  using std::swap;
  pseudonym_.InternalSwap(CastToBase(&other->pseudonym_));
  CastToBase(&friend__)->InternalSwap(CastToBase(&other->friend__));
  name_.Swap(&other->name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(id_, other->id_);
  swap(alive_, other->alive_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata Author::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void BadAuthor::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int BadAuthor::kIdFieldNumber;
const int BadAuthor::kNameFieldNumber;
const int BadAuthor::kPseudonymFieldNumber;
const int BadAuthor::kAliveFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

BadAuthor::BadAuthor()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_BadAuthor.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.BadAuthor)
}
BadAuthor::BadAuthor(const BadAuthor& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      name_(from.name_),
      alive_(from.alive_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_id()) {
    id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.id_);
  }
  pseudonym_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_pseudonym()) {
    pseudonym_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.pseudonym_);
  }
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.BadAuthor)
}

void BadAuthor::SharedCtor() {
  id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  pseudonym_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

BadAuthor::~BadAuthor() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.BadAuthor)
  SharedDtor();
}

void BadAuthor::SharedDtor() {
  id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  pseudonym_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void BadAuthor::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* BadAuthor::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const BadAuthor& BadAuthor::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_BadAuthor.base);
  return *internal_default_instance();
}


void BadAuthor::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.BadAuthor)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  name_.Clear();
  alive_.Clear();
  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 3u) {
    if (cached_has_bits & 0x00000001u) {
      id_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000002u) {
      pseudonym_.ClearNonDefaultToEmptyNoArena();
    }
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool BadAuthor::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.BadAuthor)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional string id = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_id()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->id().data(), static_cast<int>(this->id().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.BadAuthor.id");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 name = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 1, 16u, input, this->mutable_name())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_name())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional string pseudonym = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_pseudonym()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->pseudonym().data(), static_cast<int>(this->pseudonym().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.BadAuthor.pseudonym");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool alive = 4 [packed = true];
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_alive())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 1, 34u, input, this->mutable_alive())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.BadAuthor)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.BadAuthor)
  return false;
#undef DO_
}

void BadAuthor::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.BadAuthor)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional string id = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->id().data(), static_cast<int>(this->id().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.BadAuthor.id");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      1, this->id(), output);
  }

  // repeated uint64 name = 2;
  for (int i = 0, n = this->name_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(
      2, this->name(i), output);
  }

  // optional string pseudonym = 3;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->pseudonym().data(), static_cast<int>(this->pseudonym().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.BadAuthor.pseudonym");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      3, this->pseudonym(), output);
  }

  // repeated bool alive = 4 [packed = true];
  if (this->alive_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(4, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _alive_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteBoolArray(
      this->alive().data(), this->alive_size(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.BadAuthor)
}

::google::protobuf::uint8* BadAuthor::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.BadAuthor)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional string id = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->id().data(), static_cast<int>(this->id().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.BadAuthor.id");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        1, this->id(), target);
  }

  // repeated uint64 name = 2;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteUInt64ToArray(2, this->name_, target);

  // optional string pseudonym = 3;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->pseudonym().data(), static_cast<int>(this->pseudonym().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.BadAuthor.pseudonym");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        3, this->pseudonym(), target);
  }

  // repeated bool alive = 4 [packed = true];
  if (this->alive_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      4,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _alive_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBoolNoTagToArray(this->alive_, target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.BadAuthor)
  return target;
}

size_t BadAuthor::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.BadAuthor)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated uint64 name = 2;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->name_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->name_size());
    total_size += data_size;
  }

  // repeated bool alive = 4 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->alive_size());
    size_t data_size = 1UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _alive_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  if (_has_bits_[0 / 32] & 3u) {
    // optional string id = 1;
    if (has_id()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->id());
    }

    // optional string pseudonym = 3;
    if (has_pseudonym()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->pseudonym());
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void BadAuthor::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.BadAuthor)
  GOOGLE_DCHECK_NE(&from, this);
  const BadAuthor* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const BadAuthor>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.BadAuthor)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.BadAuthor)
    MergeFrom(*source);
  }
}

void BadAuthor::MergeFrom(const BadAuthor& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.BadAuthor)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  name_.MergeFrom(from.name_);
  alive_.MergeFrom(from.alive_);
  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 3u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_id();
      id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.id_);
    }
    if (cached_has_bits & 0x00000002u) {
      set_has_pseudonym();
      pseudonym_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.pseudonym_);
    }
  }
}

void BadAuthor::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.BadAuthor)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void BadAuthor::CopyFrom(const BadAuthor& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.BadAuthor)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool BadAuthor::IsInitialized() const {
  return true;
}

void BadAuthor::Swap(BadAuthor* other) {
  if (other == this) return;
  InternalSwap(other);
}
void BadAuthor::InternalSwap(BadAuthor* other) {
  using std::swap;
  name_.InternalSwap(&other->name_);
  alive_.InternalSwap(&other->alive_);
  id_.Swap(&other->id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  pseudonym_.Swap(&other->pseudonym_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata BadAuthor::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Primitive::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Primitive::kFix32FieldNumber;
const int Primitive::kU32FieldNumber;
const int Primitive::kI32FieldNumber;
const int Primitive::kSf32FieldNumber;
const int Primitive::kS32FieldNumber;
const int Primitive::kFix64FieldNumber;
const int Primitive::kU64FieldNumber;
const int Primitive::kI64FieldNumber;
const int Primitive::kSf64FieldNumber;
const int Primitive::kS64FieldNumber;
const int Primitive::kStrFieldNumber;
const int Primitive::kBytesFieldNumber;
const int Primitive::kFloatFieldNumber;
const int Primitive::kDoubleFieldNumber;
const int Primitive::kBoolFieldNumber;
const int Primitive::kRepFix32FieldNumber;
const int Primitive::kRepU32FieldNumber;
const int Primitive::kRepI32FieldNumber;
const int Primitive::kRepSf32FieldNumber;
const int Primitive::kRepS32FieldNumber;
const int Primitive::kRepFix64FieldNumber;
const int Primitive::kRepU64FieldNumber;
const int Primitive::kRepI64FieldNumber;
const int Primitive::kRepSf64FieldNumber;
const int Primitive::kRepS64FieldNumber;
const int Primitive::kRepStrFieldNumber;
const int Primitive::kRepBytesFieldNumber;
const int Primitive::kRepFloatFieldNumber;
const int Primitive::kRepDoubleFieldNumber;
const int Primitive::kRepBoolFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Primitive::Primitive()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Primitive.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Primitive)
}
Primitive::Primitive(const Primitive& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      rep_fix32_(from.rep_fix32_),
      rep_u32_(from.rep_u32_),
      rep_i32_(from.rep_i32_),
      rep_sf32_(from.rep_sf32_),
      rep_s32_(from.rep_s32_),
      rep_fix64_(from.rep_fix64_),
      rep_u64_(from.rep_u64_),
      rep_i64_(from.rep_i64_),
      rep_sf64_(from.rep_sf64_),
      rep_s64_(from.rep_s64_),
      rep_str_(from.rep_str_),
      rep_bytes_(from.rep_bytes_),
      rep_float_(from.rep_float_),
      rep_double_(from.rep_double_),
      rep_bool_(from.rep_bool_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_str()) {
    str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.str_);
  }
  bytes_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_bytes()) {
    bytes_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.bytes_);
  }
  ::memcpy(&fix32_, &from.fix32_,
    static_cast<size_t>(reinterpret_cast<char*>(&bool__) -
    reinterpret_cast<char*>(&fix32_)) + sizeof(bool__));
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Primitive)
}

void Primitive::SharedCtor() {
  str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  bytes_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::memset(&fix32_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&bool__) -
      reinterpret_cast<char*>(&fix32_)) + sizeof(bool__));
}

Primitive::~Primitive() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Primitive)
  SharedDtor();
}

void Primitive::SharedDtor() {
  str_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  bytes_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void Primitive::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Primitive::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Primitive& Primitive::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Primitive.base);
  return *internal_default_instance();
}


void Primitive::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Primitive)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  rep_fix32_.Clear();
  rep_u32_.Clear();
  rep_i32_.Clear();
  rep_sf32_.Clear();
  rep_s32_.Clear();
  rep_fix64_.Clear();
  rep_u64_.Clear();
  rep_i64_.Clear();
  rep_sf64_.Clear();
  rep_s64_.Clear();
  rep_str_.Clear();
  rep_bytes_.Clear();
  rep_float_.Clear();
  rep_double_.Clear();
  rep_bool_.Clear();
  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 3u) {
    if (cached_has_bits & 0x00000001u) {
      str_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000002u) {
      bytes_.ClearNonDefaultToEmptyNoArena();
    }
  }
  if (cached_has_bits & 252u) {
    ::memset(&fix32_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&u64_) -
        reinterpret_cast<char*>(&fix32_)) + sizeof(u64_));
  }
  if (cached_has_bits & 32512u) {
    ::memset(&i64_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&bool__) -
        reinterpret_cast<char*>(&i64_)) + sizeof(bool__));
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Primitive::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Primitive)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional fixed32 fix32 = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(13u /* 13 & 0xFF */)) {
          set_has_fix32();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, &fix32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional uint32 u32 = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
          set_has_u32();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &u32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional int32 i32 = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
          set_has_i32();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &i32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional sfixed32 sf32 = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(37u /* 37 & 0xFF */)) {
          set_has_sf32();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, &sf32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional sint32 s32 = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) {
          set_has_s32();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, &s32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional fixed64 fix64 = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(49u /* 49 & 0xFF */)) {
          set_has_fix64();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, &fix64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional uint64 u64 = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(56u /* 56 & 0xFF */)) {
          set_has_u64();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, &u64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional int64 i64 = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(64u /* 64 & 0xFF */)) {
          set_has_i64();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, &i64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional sfixed64 sf64 = 9;
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(73u /* 73 & 0xFF */)) {
          set_has_sf64();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, &sf64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional sint64 s64 = 10;
      case 10: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(80u /* 80 & 0xFF */)) {
          set_has_s64();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, &s64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional string str = 11;
      case 11: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(90u /* 90 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_str()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->str().data(), static_cast<int>(this->str().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Primitive.str");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional bytes bytes = 12;
      case 12: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(98u /* 98 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->mutable_bytes()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional float float = 13;
      case 13: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(109u /* 109 & 0xFF */)) {
          set_has_float_();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, &float__)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional double double = 14;
      case 14: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(113u /* 113 & 0xFF */)) {
          set_has_double_();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, &double__)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional bool bool = 15;
      case 15: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(120u /* 120 & 0xFF */)) {
          set_has_bool_();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &bool__)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed32 rep_fix32 = 16;
      case 16: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(133u /* 133 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 2, 133u, input, this->mutable_rep_fix32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(130u /* 130 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, this->mutable_rep_fix32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint32 rep_u32 = 17;
      case 17: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(136u /* 136 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 2, 136u, input, this->mutable_rep_u32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(138u /* 138 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_rep_u32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int32 rep_i32 = 18;
      case 18: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(144u /* 144 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 2, 144u, input, this->mutable_rep_i32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(146u /* 146 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_rep_i32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed32 rep_sf32 = 19;
      case 19: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(157u /* 157 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 2, 157u, input, this->mutable_rep_sf32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(154u /* 154 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, this->mutable_rep_sf32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint32 rep_s32 = 20;
      case 20: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(160u /* 160 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 2, 160u, input, this->mutable_rep_s32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(162u /* 162 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, this->mutable_rep_s32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed64 rep_fix64 = 21;
      case 21: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(169u /* 169 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 2, 169u, input, this->mutable_rep_fix64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(170u /* 170 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, this->mutable_rep_fix64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 rep_u64 = 22;
      case 22: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(176u /* 176 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 2, 176u, input, this->mutable_rep_u64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(178u /* 178 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_rep_u64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int64 rep_i64 = 23;
      case 23: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(184u /* 184 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 2, 184u, input, this->mutable_rep_i64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(186u /* 186 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_rep_i64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed64 rep_sf64 = 24;
      case 24: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(193u /* 193 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 2, 193u, input, this->mutable_rep_sf64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(194u /* 194 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, this->mutable_rep_sf64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint64 rep_s64 = 25;
      case 25: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(200u /* 200 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 2, 200u, input, this->mutable_rep_s64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(202u /* 202 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, this->mutable_rep_s64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated string rep_str = 26;
      case 26: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(210u /* 210 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->add_rep_str()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->rep_str(this->rep_str_size() - 1).data(),
            static_cast<int>(this->rep_str(this->rep_str_size() - 1).length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Primitive.rep_str");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bytes rep_bytes = 27;
      case 27: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(218u /* 218 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_rep_bytes()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated float rep_float = 28;
      case 28: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(229u /* 229 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 2, 229u, input, this->mutable_rep_float())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(226u /* 226 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_rep_float())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated double rep_double = 29;
      case 29: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(233u /* 233 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 2, 233u, input, this->mutable_rep_double())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(234u /* 234 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, this->mutable_rep_double())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool rep_bool = 30;
      case 30: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(240u /* 240 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 2, 240u, input, this->mutable_rep_bool())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(242u /* 242 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_rep_bool())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Primitive)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Primitive)
  return false;
#undef DO_
}

void Primitive::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Primitive)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional fixed32 fix32 = 1;
  if (cached_has_bits & 0x00000004u) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed32(1, this->fix32(), output);
  }

  // optional uint32 u32 = 2;
  if (cached_has_bits & 0x00000008u) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->u32(), output);
  }

  // optional int32 i32 = 3;
  if (cached_has_bits & 0x00000010u) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->i32(), output);
  }

  // optional sfixed32 sf32 = 4;
  if (cached_has_bits & 0x00000020u) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32(4, this->sf32(), output);
  }

  // optional sint32 s32 = 5;
  if (cached_has_bits & 0x00000400u) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32(5, this->s32(), output);
  }

  // optional fixed64 fix64 = 6;
  if (cached_has_bits & 0x00000040u) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed64(6, this->fix64(), output);
  }

  // optional uint64 u64 = 7;
  if (cached_has_bits & 0x00000080u) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(7, this->u64(), output);
  }

  // optional int64 i64 = 8;
  if (cached_has_bits & 0x00000100u) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(8, this->i64(), output);
  }

  // optional sfixed64 sf64 = 9;
  if (cached_has_bits & 0x00000200u) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64(9, this->sf64(), output);
  }

  // optional sint64 s64 = 10;
  if (cached_has_bits & 0x00001000u) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64(10, this->s64(), output);
  }

  // optional string str = 11;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->str().data(), static_cast<int>(this->str().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Primitive.str");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      11, this->str(), output);
  }

  // optional bytes bytes = 12;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
      12, this->bytes(), output);
  }

  // optional float float = 13;
  if (cached_has_bits & 0x00000800u) {
    ::google::protobuf::internal::WireFormatLite::WriteFloat(13, this->float_(), output);
  }

  // optional double double = 14;
  if (cached_has_bits & 0x00002000u) {
    ::google::protobuf::internal::WireFormatLite::WriteDouble(14, this->double_(), output);
  }

  // optional bool bool = 15;
  if (cached_has_bits & 0x00004000u) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(15, this->bool_(), output);
  }

  // repeated fixed32 rep_fix32 = 16;
  for (int i = 0, n = this->rep_fix32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed32(
      16, this->rep_fix32(i), output);
  }

  // repeated uint32 rep_u32 = 17;
  for (int i = 0, n = this->rep_u32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(
      17, this->rep_u32(i), output);
  }

  // repeated int32 rep_i32 = 18;
  for (int i = 0, n = this->rep_i32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(
      18, this->rep_i32(i), output);
  }

  // repeated sfixed32 rep_sf32 = 19;
  for (int i = 0, n = this->rep_sf32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32(
      19, this->rep_sf32(i), output);
  }

  // repeated sint32 rep_s32 = 20;
  for (int i = 0, n = this->rep_s32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32(
      20, this->rep_s32(i), output);
  }

  // repeated fixed64 rep_fix64 = 21;
  for (int i = 0, n = this->rep_fix64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed64(
      21, this->rep_fix64(i), output);
  }

  // repeated uint64 rep_u64 = 22;
  for (int i = 0, n = this->rep_u64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(
      22, this->rep_u64(i), output);
  }

  // repeated int64 rep_i64 = 23;
  for (int i = 0, n = this->rep_i64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(
      23, this->rep_i64(i), output);
  }

  // repeated sfixed64 rep_sf64 = 24;
  for (int i = 0, n = this->rep_sf64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64(
      24, this->rep_sf64(i), output);
  }

  // repeated sint64 rep_s64 = 25;
  for (int i = 0, n = this->rep_s64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64(
      25, this->rep_s64(i), output);
  }

  // repeated string rep_str = 26;
  for (int i = 0, n = this->rep_str_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->rep_str(i).data(), static_cast<int>(this->rep_str(i).length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Primitive.rep_str");
    ::google::protobuf::internal::WireFormatLite::WriteString(
      26, this->rep_str(i), output);
  }

  // repeated bytes rep_bytes = 27;
  for (int i = 0, n = this->rep_bytes_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      27, this->rep_bytes(i), output);
  }

  // repeated float rep_float = 28;
  for (int i = 0, n = this->rep_float_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFloat(
      28, this->rep_float(i), output);
  }

  // repeated double rep_double = 29;
  for (int i = 0, n = this->rep_double_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteDouble(
      29, this->rep_double(i), output);
  }

  // repeated bool rep_bool = 30;
  for (int i = 0, n = this->rep_bool_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(
      30, this->rep_bool(i), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Primitive)
}

::google::protobuf::uint8* Primitive::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Primitive)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional fixed32 fix32 = 1;
  if (cached_has_bits & 0x00000004u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFixed32ToArray(1, this->fix32(), target);
  }

  // optional uint32 u32 = 2;
  if (cached_has_bits & 0x00000008u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->u32(), target);
  }

  // optional int32 i32 = 3;
  if (cached_has_bits & 0x00000010u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->i32(), target);
  }

  // optional sfixed32 sf32 = 4;
  if (cached_has_bits & 0x00000020u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSFixed32ToArray(4, this->sf32(), target);
  }

  // optional sint32 s32 = 5;
  if (cached_has_bits & 0x00000400u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSInt32ToArray(5, this->s32(), target);
  }

  // optional fixed64 fix64 = 6;
  if (cached_has_bits & 0x00000040u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFixed64ToArray(6, this->fix64(), target);
  }

  // optional uint64 u64 = 7;
  if (cached_has_bits & 0x00000080u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(7, this->u64(), target);
  }

  // optional int64 i64 = 8;
  if (cached_has_bits & 0x00000100u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(8, this->i64(), target);
  }

  // optional sfixed64 sf64 = 9;
  if (cached_has_bits & 0x00000200u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSFixed64ToArray(9, this->sf64(), target);
  }

  // optional sint64 s64 = 10;
  if (cached_has_bits & 0x00001000u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSInt64ToArray(10, this->s64(), target);
  }

  // optional string str = 11;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->str().data(), static_cast<int>(this->str().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Primitive.str");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        11, this->str(), target);
  }

  // optional bytes bytes = 12;
  if (cached_has_bits & 0x00000002u) {
    target =
      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
        12, this->bytes(), target);
  }

  // optional float float = 13;
  if (cached_has_bits & 0x00000800u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(13, this->float_(), target);
  }

  // optional double double = 14;
  if (cached_has_bits & 0x00002000u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(14, this->double_(), target);
  }

  // optional bool bool = 15;
  if (cached_has_bits & 0x00004000u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(15, this->bool_(), target);
  }

  // repeated fixed32 rep_fix32 = 16;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteFixed32ToArray(16, this->rep_fix32_, target);

  // repeated uint32 rep_u32 = 17;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteUInt32ToArray(17, this->rep_u32_, target);

  // repeated int32 rep_i32 = 18;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteInt32ToArray(18, this->rep_i32_, target);

  // repeated sfixed32 rep_sf32 = 19;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSFixed32ToArray(19, this->rep_sf32_, target);

  // repeated sint32 rep_s32 = 20;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSInt32ToArray(20, this->rep_s32_, target);

  // repeated fixed64 rep_fix64 = 21;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteFixed64ToArray(21, this->rep_fix64_, target);

  // repeated uint64 rep_u64 = 22;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteUInt64ToArray(22, this->rep_u64_, target);

  // repeated int64 rep_i64 = 23;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteInt64ToArray(23, this->rep_i64_, target);

  // repeated sfixed64 rep_sf64 = 24;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSFixed64ToArray(24, this->rep_sf64_, target);

  // repeated sint64 rep_s64 = 25;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSInt64ToArray(25, this->rep_s64_, target);

  // repeated string rep_str = 26;
  for (int i = 0, n = this->rep_str_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->rep_str(i).data(), static_cast<int>(this->rep_str(i).length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Primitive.rep_str");
    target = ::google::protobuf::internal::WireFormatLite::
      WriteStringToArray(26, this->rep_str(i), target);
  }

  // repeated bytes rep_bytes = 27;
  for (int i = 0, n = this->rep_bytes_size(); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBytesToArray(27, this->rep_bytes(i), target);
  }

  // repeated float rep_float = 28;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteFloatToArray(28, this->rep_float_, target);

  // repeated double rep_double = 29;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteDoubleToArray(29, this->rep_double_, target);

  // repeated bool rep_bool = 30;
  target = ::google::protobuf::internal::WireFormatLite::
    WriteBoolToArray(30, this->rep_bool_, target);

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Primitive)
  return target;
}

size_t Primitive::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Primitive)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated fixed32 rep_fix32 = 16;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_fix32_size());
    size_t data_size = 4UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_fix32_size());
    total_size += data_size;
  }

  // repeated uint32 rep_u32 = 17;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->rep_u32_);
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_u32_size());
    total_size += data_size;
  }

  // repeated int32 rep_i32 = 18;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int32Size(this->rep_i32_);
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_i32_size());
    total_size += data_size;
  }

  // repeated sfixed32 rep_sf32 = 19;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_sf32_size());
    size_t data_size = 4UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_sf32_size());
    total_size += data_size;
  }

  // repeated sint32 rep_s32 = 20;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt32Size(this->rep_s32_);
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_s32_size());
    total_size += data_size;
  }

  // repeated fixed64 rep_fix64 = 21;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_fix64_size());
    size_t data_size = 8UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_fix64_size());
    total_size += data_size;
  }

  // repeated uint64 rep_u64 = 22;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->rep_u64_);
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_u64_size());
    total_size += data_size;
  }

  // repeated int64 rep_i64 = 23;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int64Size(this->rep_i64_);
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_i64_size());
    total_size += data_size;
  }

  // repeated sfixed64 rep_sf64 = 24;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_sf64_size());
    size_t data_size = 8UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_sf64_size());
    total_size += data_size;
  }

  // repeated sint64 rep_s64 = 25;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt64Size(this->rep_s64_);
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_s64_size());
    total_size += data_size;
  }

  // repeated string rep_str = 26;
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->rep_str_size());
  for (int i = 0, n = this->rep_str_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
      this->rep_str(i));
  }

  // repeated bytes rep_bytes = 27;
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->rep_bytes_size());
  for (int i = 0, n = this->rep_bytes_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::BytesSize(
      this->rep_bytes(i));
  }

  // repeated float rep_float = 28;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_float_size());
    size_t data_size = 4UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_float_size());
    total_size += data_size;
  }

  // repeated double rep_double = 29;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_double_size());
    size_t data_size = 8UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_double_size());
    total_size += data_size;
  }

  // repeated bool rep_bool = 30;
  {
    unsigned int count = static_cast<unsigned int>(this->rep_bool_size());
    size_t data_size = 1UL * count;
    total_size += 2 *
                  ::google::protobuf::internal::FromIntSize(this->rep_bool_size());
    total_size += data_size;
  }

  if (_has_bits_[0 / 32] & 255u) {
    // optional string str = 11;
    if (has_str()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->str());
    }

    // optional bytes bytes = 12;
    if (has_bytes()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::BytesSize(
          this->bytes());
    }

    // optional fixed32 fix32 = 1;
    if (has_fix32()) {
      total_size += 1 + 4;
    }

    // optional uint32 u32 = 2;
    if (has_u32()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt32Size(
          this->u32());
    }

    // optional int32 i32 = 3;
    if (has_i32()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->i32());
    }

    // optional sfixed32 sf32 = 4;
    if (has_sf32()) {
      total_size += 1 + 4;
    }

    // optional fixed64 fix64 = 6;
    if (has_fix64()) {
      total_size += 1 + 8;
    }

    // optional uint64 u64 = 7;
    if (has_u64()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::UInt64Size(
          this->u64());
    }

  }
  if (_has_bits_[8 / 32] & 32512u) {
    // optional int64 i64 = 8;
    if (has_i64()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int64Size(
          this->i64());
    }

    // optional sfixed64 sf64 = 9;
    if (has_sf64()) {
      total_size += 1 + 8;
    }

    // optional sint32 s32 = 5;
    if (has_s32()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::SInt32Size(
          this->s32());
    }

    // optional float float = 13;
    if (has_float_()) {
      total_size += 1 + 4;
    }

    // optional sint64 s64 = 10;
    if (has_s64()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::SInt64Size(
          this->s64());
    }

    // optional double double = 14;
    if (has_double_()) {
      total_size += 1 + 8;
    }

    // optional bool bool = 15;
    if (has_bool_()) {
      total_size += 1 + 1;
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Primitive::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Primitive)
  GOOGLE_DCHECK_NE(&from, this);
  const Primitive* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Primitive>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Primitive)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Primitive)
    MergeFrom(*source);
  }
}

void Primitive::MergeFrom(const Primitive& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Primitive)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  rep_fix32_.MergeFrom(from.rep_fix32_);
  rep_u32_.MergeFrom(from.rep_u32_);
  rep_i32_.MergeFrom(from.rep_i32_);
  rep_sf32_.MergeFrom(from.rep_sf32_);
  rep_s32_.MergeFrom(from.rep_s32_);
  rep_fix64_.MergeFrom(from.rep_fix64_);
  rep_u64_.MergeFrom(from.rep_u64_);
  rep_i64_.MergeFrom(from.rep_i64_);
  rep_sf64_.MergeFrom(from.rep_sf64_);
  rep_s64_.MergeFrom(from.rep_s64_);
  rep_str_.MergeFrom(from.rep_str_);
  rep_bytes_.MergeFrom(from.rep_bytes_);
  rep_float_.MergeFrom(from.rep_float_);
  rep_double_.MergeFrom(from.rep_double_);
  rep_bool_.MergeFrom(from.rep_bool_);
  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 255u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_str();
      str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.str_);
    }
    if (cached_has_bits & 0x00000002u) {
      set_has_bytes();
      bytes_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.bytes_);
    }
    if (cached_has_bits & 0x00000004u) {
      fix32_ = from.fix32_;
    }
    if (cached_has_bits & 0x00000008u) {
      u32_ = from.u32_;
    }
    if (cached_has_bits & 0x00000010u) {
      i32_ = from.i32_;
    }
    if (cached_has_bits & 0x00000020u) {
      sf32_ = from.sf32_;
    }
    if (cached_has_bits & 0x00000040u) {
      fix64_ = from.fix64_;
    }
    if (cached_has_bits & 0x00000080u) {
      u64_ = from.u64_;
    }
    _has_bits_[0] |= cached_has_bits;
  }
  if (cached_has_bits & 32512u) {
    if (cached_has_bits & 0x00000100u) {
      i64_ = from.i64_;
    }
    if (cached_has_bits & 0x00000200u) {
      sf64_ = from.sf64_;
    }
    if (cached_has_bits & 0x00000400u) {
      s32_ = from.s32_;
    }
    if (cached_has_bits & 0x00000800u) {
      float__ = from.float__;
    }
    if (cached_has_bits & 0x00001000u) {
      s64_ = from.s64_;
    }
    if (cached_has_bits & 0x00002000u) {
      double__ = from.double__;
    }
    if (cached_has_bits & 0x00004000u) {
      bool__ = from.bool__;
    }
    _has_bits_[0] |= cached_has_bits;
  }
}

void Primitive::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Primitive)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Primitive::CopyFrom(const Primitive& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Primitive)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Primitive::IsInitialized() const {
  return true;
}

void Primitive::Swap(Primitive* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Primitive::InternalSwap(Primitive* other) {
  using std::swap;
  rep_fix32_.InternalSwap(&other->rep_fix32_);
  rep_u32_.InternalSwap(&other->rep_u32_);
  rep_i32_.InternalSwap(&other->rep_i32_);
  rep_sf32_.InternalSwap(&other->rep_sf32_);
  rep_s32_.InternalSwap(&other->rep_s32_);
  rep_fix64_.InternalSwap(&other->rep_fix64_);
  rep_u64_.InternalSwap(&other->rep_u64_);
  rep_i64_.InternalSwap(&other->rep_i64_);
  rep_sf64_.InternalSwap(&other->rep_sf64_);
  rep_s64_.InternalSwap(&other->rep_s64_);
  rep_str_.InternalSwap(CastToBase(&other->rep_str_));
  rep_bytes_.InternalSwap(CastToBase(&other->rep_bytes_));
  rep_float_.InternalSwap(&other->rep_float_);
  rep_double_.InternalSwap(&other->rep_double_);
  rep_bool_.InternalSwap(&other->rep_bool_);
  str_.Swap(&other->str_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  bytes_.Swap(&other->bytes_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(fix32_, other->fix32_);
  swap(u32_, other->u32_);
  swap(i32_, other->i32_);
  swap(sf32_, other->sf32_);
  swap(fix64_, other->fix64_);
  swap(u64_, other->u64_);
  swap(i64_, other->i64_);
  swap(sf64_, other->sf64_);
  swap(s32_, other->s32_);
  swap(float__, other->float__);
  swap(s64_, other->s64_);
  swap(double__, other->double__);
  swap(bool__, other->bool__);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata Primitive::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void PackedPrimitive::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int PackedPrimitive::kRepFix32FieldNumber;
const int PackedPrimitive::kRepU32FieldNumber;
const int PackedPrimitive::kRepI32FieldNumber;
const int PackedPrimitive::kRepSf32FieldNumber;
const int PackedPrimitive::kRepS32FieldNumber;
const int PackedPrimitive::kRepFix64FieldNumber;
const int PackedPrimitive::kRepU64FieldNumber;
const int PackedPrimitive::kRepI64FieldNumber;
const int PackedPrimitive::kRepSf64FieldNumber;
const int PackedPrimitive::kRepS64FieldNumber;
const int PackedPrimitive::kRepFloatFieldNumber;
const int PackedPrimitive::kRepDoubleFieldNumber;
const int PackedPrimitive::kRepBoolFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

PackedPrimitive::PackedPrimitive()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_PackedPrimitive.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.PackedPrimitive)
}
PackedPrimitive::PackedPrimitive(const PackedPrimitive& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      rep_fix32_(from.rep_fix32_),
      rep_u32_(from.rep_u32_),
      rep_i32_(from.rep_i32_),
      rep_sf32_(from.rep_sf32_),
      rep_s32_(from.rep_s32_),
      rep_fix64_(from.rep_fix64_),
      rep_u64_(from.rep_u64_),
      rep_i64_(from.rep_i64_),
      rep_sf64_(from.rep_sf64_),
      rep_s64_(from.rep_s64_),
      rep_float_(from.rep_float_),
      rep_double_(from.rep_double_),
      rep_bool_(from.rep_bool_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.PackedPrimitive)
}

void PackedPrimitive::SharedCtor() {
}

PackedPrimitive::~PackedPrimitive() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.PackedPrimitive)
  SharedDtor();
}

void PackedPrimitive::SharedDtor() {
}

void PackedPrimitive::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* PackedPrimitive::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const PackedPrimitive& PackedPrimitive::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_PackedPrimitive.base);
  return *internal_default_instance();
}


void PackedPrimitive::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.PackedPrimitive)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  rep_fix32_.Clear();
  rep_u32_.Clear();
  rep_i32_.Clear();
  rep_sf32_.Clear();
  rep_s32_.Clear();
  rep_fix64_.Clear();
  rep_u64_.Clear();
  rep_i64_.Clear();
  rep_sf64_.Clear();
  rep_s64_.Clear();
  rep_float_.Clear();
  rep_double_.Clear();
  rep_bool_.Clear();
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool PackedPrimitive::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.PackedPrimitive)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated fixed32 rep_fix32 = 16 [packed = true];
      case 16: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(130u /* 130 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, this->mutable_rep_fix32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(133u /* 133 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 2, 130u, input, this->mutable_rep_fix32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint32 rep_u32 = 17 [packed = true];
      case 17: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(138u /* 138 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_rep_u32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(136u /* 136 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 2, 138u, input, this->mutable_rep_u32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int32 rep_i32 = 18 [packed = true];
      case 18: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(146u /* 146 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_rep_i32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(144u /* 144 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 2, 146u, input, this->mutable_rep_i32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed32 rep_sf32 = 19 [packed = true];
      case 19: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(154u /* 154 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, this->mutable_rep_sf32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(157u /* 157 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 2, 154u, input, this->mutable_rep_sf32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint32 rep_s32 = 20 [packed = true];
      case 20: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(162u /* 162 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, this->mutable_rep_s32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(160u /* 160 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 2, 162u, input, this->mutable_rep_s32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed64 rep_fix64 = 21 [packed = true];
      case 21: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(170u /* 170 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, this->mutable_rep_fix64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(169u /* 169 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 2, 170u, input, this->mutable_rep_fix64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 rep_u64 = 22 [packed = true];
      case 22: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(178u /* 178 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_rep_u64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(176u /* 176 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 2, 178u, input, this->mutable_rep_u64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int64 rep_i64 = 23 [packed = true];
      case 23: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(186u /* 186 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_rep_i64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(184u /* 184 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 2, 186u, input, this->mutable_rep_i64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed64 rep_sf64 = 24 [packed = true];
      case 24: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(194u /* 194 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, this->mutable_rep_sf64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(193u /* 193 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 2, 194u, input, this->mutable_rep_sf64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint64 rep_s64 = 25 [packed = true];
      case 25: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(202u /* 202 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, this->mutable_rep_s64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(200u /* 200 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 2, 202u, input, this->mutable_rep_s64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated float rep_float = 28 [packed = true];
      case 28: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(226u /* 226 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_rep_float())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(229u /* 229 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 2, 226u, input, this->mutable_rep_float())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated double rep_double = 29 [packed = true];
      case 29: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(234u /* 234 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, this->mutable_rep_double())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(233u /* 233 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 2, 234u, input, this->mutable_rep_double())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool rep_bool = 30 [packed = true];
      case 30: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(242u /* 242 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_rep_bool())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(240u /* 240 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 2, 242u, input, this->mutable_rep_bool())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.PackedPrimitive)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.PackedPrimitive)
  return false;
#undef DO_
}

void PackedPrimitive::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.PackedPrimitive)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated fixed32 rep_fix32 = 16 [packed = true];
  if (this->rep_fix32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(16, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_fix32_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFixed32Array(
      this->rep_fix32().data(), this->rep_fix32_size(), output);
  }

  // repeated uint32 rep_u32 = 17 [packed = true];
  if (this->rep_u32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(17, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_u32_cached_byte_size_));
  }
  for (int i = 0, n = this->rep_u32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32NoTag(
      this->rep_u32(i), output);
  }

  // repeated int32 rep_i32 = 18 [packed = true];
  if (this->rep_i32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(18, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_i32_cached_byte_size_));
  }
  for (int i = 0, n = this->rep_i32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
      this->rep_i32(i), output);
  }

  // repeated sfixed32 rep_sf32 = 19 [packed = true];
  if (this->rep_sf32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(19, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_sf32_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32Array(
      this->rep_sf32().data(), this->rep_sf32_size(), output);
  }

  // repeated sint32 rep_s32 = 20 [packed = true];
  if (this->rep_s32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(20, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_s32_cached_byte_size_));
  }
  for (int i = 0, n = this->rep_s32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32NoTag(
      this->rep_s32(i), output);
  }

  // repeated fixed64 rep_fix64 = 21 [packed = true];
  if (this->rep_fix64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(21, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_fix64_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFixed64Array(
      this->rep_fix64().data(), this->rep_fix64_size(), output);
  }

  // repeated uint64 rep_u64 = 22 [packed = true];
  if (this->rep_u64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(22, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_u64_cached_byte_size_));
  }
  for (int i = 0, n = this->rep_u64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64NoTag(
      this->rep_u64(i), output);
  }

  // repeated int64 rep_i64 = 23 [packed = true];
  if (this->rep_i64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(23, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_i64_cached_byte_size_));
  }
  for (int i = 0, n = this->rep_i64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag(
      this->rep_i64(i), output);
  }

  // repeated sfixed64 rep_sf64 = 24 [packed = true];
  if (this->rep_sf64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(24, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_sf64_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64Array(
      this->rep_sf64().data(), this->rep_sf64_size(), output);
  }

  // repeated sint64 rep_s64 = 25 [packed = true];
  if (this->rep_s64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(25, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_s64_cached_byte_size_));
  }
  for (int i = 0, n = this->rep_s64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64NoTag(
      this->rep_s64(i), output);
  }

  // repeated float rep_float = 28 [packed = true];
  if (this->rep_float_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(28, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_float_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFloatArray(
      this->rep_float().data(), this->rep_float_size(), output);
  }

  // repeated double rep_double = 29 [packed = true];
  if (this->rep_double_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(29, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_double_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteDoubleArray(
      this->rep_double().data(), this->rep_double_size(), output);
  }

  // repeated bool rep_bool = 30 [packed = true];
  if (this->rep_bool_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(30, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _rep_bool_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteBoolArray(
      this->rep_bool().data(), this->rep_bool_size(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.PackedPrimitive)
}

::google::protobuf::uint8* PackedPrimitive::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.PackedPrimitive)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated fixed32 rep_fix32 = 16 [packed = true];
  if (this->rep_fix32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      16,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_fix32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFixed32NoTagToArray(this->rep_fix32_, target);
  }

  // repeated uint32 rep_u32 = 17 [packed = true];
  if (this->rep_u32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      17,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_u32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt32NoTagToArray(this->rep_u32_, target);
  }

  // repeated int32 rep_i32 = 18 [packed = true];
  if (this->rep_i32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      18,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_i32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt32NoTagToArray(this->rep_i32_, target);
  }

  // repeated sfixed32 rep_sf32 = 19 [packed = true];
  if (this->rep_sf32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      19,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_sf32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSFixed32NoTagToArray(this->rep_sf32_, target);
  }

  // repeated sint32 rep_s32 = 20 [packed = true];
  if (this->rep_s32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      20,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_s32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSInt32NoTagToArray(this->rep_s32_, target);
  }

  // repeated fixed64 rep_fix64 = 21 [packed = true];
  if (this->rep_fix64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      21,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_fix64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFixed64NoTagToArray(this->rep_fix64_, target);
  }

  // repeated uint64 rep_u64 = 22 [packed = true];
  if (this->rep_u64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      22,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_u64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt64NoTagToArray(this->rep_u64_, target);
  }

  // repeated int64 rep_i64 = 23 [packed = true];
  if (this->rep_i64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      23,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_i64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt64NoTagToArray(this->rep_i64_, target);
  }

  // repeated sfixed64 rep_sf64 = 24 [packed = true];
  if (this->rep_sf64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      24,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_sf64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSFixed64NoTagToArray(this->rep_sf64_, target);
  }

  // repeated sint64 rep_s64 = 25 [packed = true];
  if (this->rep_s64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      25,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_s64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSInt64NoTagToArray(this->rep_s64_, target);
  }

  // repeated float rep_float = 28 [packed = true];
  if (this->rep_float_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      28,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_float_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFloatNoTagToArray(this->rep_float_, target);
  }

  // repeated double rep_double = 29 [packed = true];
  if (this->rep_double_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      29,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_double_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteDoubleNoTagToArray(this->rep_double_, target);
  }

  // repeated bool rep_bool = 30 [packed = true];
  if (this->rep_bool_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      30,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _rep_bool_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBoolNoTagToArray(this->rep_bool_, target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.PackedPrimitive)
  return target;
}

size_t PackedPrimitive::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.PackedPrimitive)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated fixed32 rep_fix32 = 16 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_fix32_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_fix32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint32 rep_u32 = 17 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->rep_u32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_u32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated int32 rep_i32 = 18 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int32Size(this->rep_i32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_i32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sfixed32 rep_sf32 = 19 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_sf32_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_sf32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sint32 rep_s32 = 20 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt32Size(this->rep_s32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_s32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated fixed64 rep_fix64 = 21 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_fix64_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_fix64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint64 rep_u64 = 22 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->rep_u64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_u64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated int64 rep_i64 = 23 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int64Size(this->rep_i64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_i64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sfixed64 rep_sf64 = 24 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_sf64_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_sf64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sint64 rep_s64 = 25 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt64Size(this->rep_s64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_s64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated float rep_float = 28 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_float_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_float_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated double rep_double = 29 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_double_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_double_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated bool rep_bool = 30 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->rep_bool_size());
    size_t data_size = 1UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _rep_bool_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void PackedPrimitive::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.PackedPrimitive)
  GOOGLE_DCHECK_NE(&from, this);
  const PackedPrimitive* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const PackedPrimitive>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.PackedPrimitive)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.PackedPrimitive)
    MergeFrom(*source);
  }
}

void PackedPrimitive::MergeFrom(const PackedPrimitive& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.PackedPrimitive)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  rep_fix32_.MergeFrom(from.rep_fix32_);
  rep_u32_.MergeFrom(from.rep_u32_);
  rep_i32_.MergeFrom(from.rep_i32_);
  rep_sf32_.MergeFrom(from.rep_sf32_);
  rep_s32_.MergeFrom(from.rep_s32_);
  rep_fix64_.MergeFrom(from.rep_fix64_);
  rep_u64_.MergeFrom(from.rep_u64_);
  rep_i64_.MergeFrom(from.rep_i64_);
  rep_sf64_.MergeFrom(from.rep_sf64_);
  rep_s64_.MergeFrom(from.rep_s64_);
  rep_float_.MergeFrom(from.rep_float_);
  rep_double_.MergeFrom(from.rep_double_);
  rep_bool_.MergeFrom(from.rep_bool_);
}

void PackedPrimitive::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.PackedPrimitive)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void PackedPrimitive::CopyFrom(const PackedPrimitive& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.PackedPrimitive)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool PackedPrimitive::IsInitialized() const {
  return true;
}

void PackedPrimitive::Swap(PackedPrimitive* other) {
  if (other == this) return;
  InternalSwap(other);
}
void PackedPrimitive::InternalSwap(PackedPrimitive* other) {
  using std::swap;
  rep_fix32_.InternalSwap(&other->rep_fix32_);
  rep_u32_.InternalSwap(&other->rep_u32_);
  rep_i32_.InternalSwap(&other->rep_i32_);
  rep_sf32_.InternalSwap(&other->rep_sf32_);
  rep_s32_.InternalSwap(&other->rep_s32_);
  rep_fix64_.InternalSwap(&other->rep_fix64_);
  rep_u64_.InternalSwap(&other->rep_u64_);
  rep_i64_.InternalSwap(&other->rep_i64_);
  rep_sf64_.InternalSwap(&other->rep_sf64_);
  rep_s64_.InternalSwap(&other->rep_s64_);
  rep_float_.InternalSwap(&other->rep_float_);
  rep_double_.InternalSwap(&other->rep_double_);
  rep_bool_.InternalSwap(&other->rep_bool_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata PackedPrimitive::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void NestedBook::InitAsDefaultInstance() {
  ::google::protobuf::testing::_NestedBook_default_instance_._instance.get_mutable()->book_ = const_cast< ::google::protobuf::testing::Book*>(
      ::google::protobuf::testing::Book::internal_default_instance());
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int NestedBook::kBookFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

NestedBook::NestedBook()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_NestedBook.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.NestedBook)
}
NestedBook::NestedBook(const NestedBook& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_book()) {
    book_ = new ::google::protobuf::testing::Book(*from.book_);
  } else {
    book_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.NestedBook)
}

void NestedBook::SharedCtor() {
  book_ = NULL;
}

NestedBook::~NestedBook() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.NestedBook)
  SharedDtor();
}

void NestedBook::SharedDtor() {
  if (this != internal_default_instance()) delete book_;
}

void NestedBook::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* NestedBook::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const NestedBook& NestedBook::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_NestedBook.base);
  return *internal_default_instance();
}


void NestedBook::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.NestedBook)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(book_ != NULL);
    book_->Clear();
  }
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool NestedBook::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.NestedBook)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional .google.protobuf.testing.Book book = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_book()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.NestedBook)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.NestedBook)
  return false;
#undef DO_
}

void NestedBook::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.NestedBook)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional .google.protobuf.testing.Book book = 1;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_book(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.NestedBook)
}

::google::protobuf::uint8* NestedBook::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.NestedBook)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional .google.protobuf.testing.Book book = 1;
  if (cached_has_bits & 0x00000001u) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_book(), deterministic, target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.NestedBook)
  return target;
}

size_t NestedBook::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.NestedBook)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // optional .google.protobuf.testing.Book book = 1;
  if (has_book()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *book_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void NestedBook::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.NestedBook)
  GOOGLE_DCHECK_NE(&from, this);
  const NestedBook* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const NestedBook>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.NestedBook)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.NestedBook)
    MergeFrom(*source);
  }
}

void NestedBook::MergeFrom(const NestedBook& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.NestedBook)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_book()) {
    mutable_book()->::google::protobuf::testing::Book::MergeFrom(from.book());
  }
}

void NestedBook::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.NestedBook)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void NestedBook::CopyFrom(const NestedBook& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.NestedBook)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NestedBook::IsInitialized() const {
  if (has_book()) {
    if (!this->book_->IsInitialized()) return false;
  }
  return true;
}

void NestedBook::Swap(NestedBook* other) {
  if (other == this) return;
  InternalSwap(other);
}
void NestedBook::InternalSwap(NestedBook* other) {
  using std::swap;
  swap(book_, other->book_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata NestedBook::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void BadNestedBook::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int BadNestedBook::kBookFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

BadNestedBook::BadNestedBook()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_BadNestedBook.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.BadNestedBook)
}
BadNestedBook::BadNestedBook(const BadNestedBook& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      book_(from.book_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.BadNestedBook)
}

void BadNestedBook::SharedCtor() {
}

BadNestedBook::~BadNestedBook() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.BadNestedBook)
  SharedDtor();
}

void BadNestedBook::SharedDtor() {
}

void BadNestedBook::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* BadNestedBook::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const BadNestedBook& BadNestedBook::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_BadNestedBook.base);
  return *internal_default_instance();
}


void BadNestedBook::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.BadNestedBook)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  book_.Clear();
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool BadNestedBook::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.BadNestedBook)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated uint32 book = 1 [packed = true];
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_book())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 1, 10u, input, this->mutable_book())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.BadNestedBook)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.BadNestedBook)
  return false;
#undef DO_
}

void BadNestedBook::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.BadNestedBook)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated uint32 book = 1 [packed = true];
  if (this->book_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(1, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _book_cached_byte_size_));
  }
  for (int i = 0, n = this->book_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32NoTag(
      this->book(i), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.BadNestedBook)
}

::google::protobuf::uint8* BadNestedBook::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.BadNestedBook)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated uint32 book = 1 [packed = true];
  if (this->book_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      1,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _book_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt32NoTagToArray(this->book_, target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.BadNestedBook)
  return target;
}

size_t BadNestedBook::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.BadNestedBook)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated uint32 book = 1 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->book_);
    if (data_size > 0) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _book_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void BadNestedBook::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.BadNestedBook)
  GOOGLE_DCHECK_NE(&from, this);
  const BadNestedBook* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const BadNestedBook>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.BadNestedBook)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.BadNestedBook)
    MergeFrom(*source);
  }
}

void BadNestedBook::MergeFrom(const BadNestedBook& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.BadNestedBook)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  book_.MergeFrom(from.book_);
}

void BadNestedBook::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.BadNestedBook)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void BadNestedBook::CopyFrom(const BadNestedBook& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.BadNestedBook)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool BadNestedBook::IsInitialized() const {
  return true;
}

void BadNestedBook::Swap(BadNestedBook* other) {
  if (other == this) return;
  InternalSwap(other);
}
void BadNestedBook::InternalSwap(BadNestedBook* other) {
  using std::swap;
  book_.InternalSwap(&other->book_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata BadNestedBook::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Cyclic::InitAsDefaultInstance() {
  ::google::protobuf::testing::_Cyclic_default_instance_._instance.get_mutable()->m_book_ = const_cast< ::google::protobuf::testing::Book*>(
      ::google::protobuf::testing::Book::internal_default_instance());
  ::google::protobuf::testing::_Cyclic_default_instance_._instance.get_mutable()->m_cyclic_ = const_cast< ::google::protobuf::testing::Cyclic*>(
      ::google::protobuf::testing::Cyclic::internal_default_instance());
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Cyclic::kMIntFieldNumber;
const int Cyclic::kMStrFieldNumber;
const int Cyclic::kMBookFieldNumber;
const int Cyclic::kMAuthorFieldNumber;
const int Cyclic::kMCyclicFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Cyclic::Cyclic()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Cyclic.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.Cyclic)
}
Cyclic::Cyclic(const Cyclic& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_),
      m_author_(from.m_author_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  m_str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.has_m_str()) {
    m_str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.m_str_);
  }
  if (from.has_m_book()) {
    m_book_ = new ::google::protobuf::testing::Book(*from.m_book_);
  } else {
    m_book_ = NULL;
  }
  if (from.has_m_cyclic()) {
    m_cyclic_ = new ::google::protobuf::testing::Cyclic(*from.m_cyclic_);
  } else {
    m_cyclic_ = NULL;
  }
  m_int_ = from.m_int_;
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.Cyclic)
}

void Cyclic::SharedCtor() {
  m_str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::memset(&m_book_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&m_int_) -
      reinterpret_cast<char*>(&m_book_)) + sizeof(m_int_));
}

Cyclic::~Cyclic() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.Cyclic)
  SharedDtor();
}

void Cyclic::SharedDtor() {
  m_str_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete m_book_;
  if (this != internal_default_instance()) delete m_cyclic_;
}

void Cyclic::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* Cyclic::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Cyclic& Cyclic::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_Cyclic.base);
  return *internal_default_instance();
}


void Cyclic::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.Cyclic)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  m_author_.Clear();
  cached_has_bits = _has_bits_[0];
  if (cached_has_bits & 7u) {
    if (cached_has_bits & 0x00000001u) {
      m_str_.ClearNonDefaultToEmptyNoArena();
    }
    if (cached_has_bits & 0x00000002u) {
      GOOGLE_DCHECK(m_book_ != NULL);
      m_book_->Clear();
    }
    if (cached_has_bits & 0x00000004u) {
      GOOGLE_DCHECK(m_cyclic_ != NULL);
      m_cyclic_->Clear();
    }
  }
  m_int_ = 0;
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool Cyclic::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.Cyclic)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional int32 m_int = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          set_has_m_int();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &m_int_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional string m_str = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_m_str()));
          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
            this->m_str().data(), static_cast<int>(this->m_str().length()),
            ::google::protobuf::internal::WireFormat::PARSE,
            "google.protobuf.testing.Cyclic.m_str");
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional .google.protobuf.testing.Book m_book = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_m_book()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // optional .google.protobuf.testing.Cyclic m_cyclic = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_m_cyclic()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.testing.Author m_author = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_m_author()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.Cyclic)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.Cyclic)
  return false;
#undef DO_
}

void Cyclic::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.Cyclic)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional int32 m_int = 1;
  if (cached_has_bits & 0x00000008u) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->m_int(), output);
  }

  // optional string m_str = 2;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->m_str().data(), static_cast<int>(this->m_str().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Cyclic.m_str");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      2, this->m_str(), output);
  }

  // optional .google.protobuf.testing.Book m_book = 3;
  if (cached_has_bits & 0x00000002u) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      3, this->_internal_m_book(), output);
  }

  // optional .google.protobuf.testing.Cyclic m_cyclic = 4;
  if (cached_has_bits & 0x00000004u) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      4, this->_internal_m_cyclic(), output);
  }

  // repeated .google.protobuf.testing.Author m_author = 5;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->m_author_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      5,
      this->m_author(static_cast<int>(i)),
      output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.Cyclic)
}

::google::protobuf::uint8* Cyclic::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.Cyclic)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional int32 m_int = 1;
  if (cached_has_bits & 0x00000008u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->m_int(), target);
  }

  // optional string m_str = 2;
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
      this->m_str().data(), static_cast<int>(this->m_str().length()),
      ::google::protobuf::internal::WireFormat::SERIALIZE,
      "google.protobuf.testing.Cyclic.m_str");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        2, this->m_str(), target);
  }

  // optional .google.protobuf.testing.Book m_book = 3;
  if (cached_has_bits & 0x00000002u) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        3, this->_internal_m_book(), deterministic, target);
  }

  // optional .google.protobuf.testing.Cyclic m_cyclic = 4;
  if (cached_has_bits & 0x00000004u) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        4, this->_internal_m_cyclic(), deterministic, target);
  }

  // repeated .google.protobuf.testing.Author m_author = 5;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->m_author_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        5, this->m_author(static_cast<int>(i)), deterministic, target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.Cyclic)
  return target;
}

size_t Cyclic::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.Cyclic)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // repeated .google.protobuf.testing.Author m_author = 5;
  {
    unsigned int count = static_cast<unsigned int>(this->m_author_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->m_author(static_cast<int>(i)));
    }
  }

  if (_has_bits_[0 / 32] & 15u) {
    // optional string m_str = 2;
    if (has_m_str()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->m_str());
    }

    // optional .google.protobuf.testing.Book m_book = 3;
    if (has_m_book()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *m_book_);
    }

    // optional .google.protobuf.testing.Cyclic m_cyclic = 4;
    if (has_m_cyclic()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *m_cyclic_);
    }

    // optional int32 m_int = 1;
    if (has_m_int()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->m_int());
    }

  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Cyclic::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.Cyclic)
  GOOGLE_DCHECK_NE(&from, this);
  const Cyclic* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Cyclic>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.Cyclic)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.Cyclic)
    MergeFrom(*source);
  }
}

void Cyclic::MergeFrom(const Cyclic& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.Cyclic)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  m_author_.MergeFrom(from.m_author_);
  cached_has_bits = from._has_bits_[0];
  if (cached_has_bits & 15u) {
    if (cached_has_bits & 0x00000001u) {
      set_has_m_str();
      m_str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.m_str_);
    }
    if (cached_has_bits & 0x00000002u) {
      mutable_m_book()->::google::protobuf::testing::Book::MergeFrom(from.m_book());
    }
    if (cached_has_bits & 0x00000004u) {
      mutable_m_cyclic()->::google::protobuf::testing::Cyclic::MergeFrom(from.m_cyclic());
    }
    if (cached_has_bits & 0x00000008u) {
      m_int_ = from.m_int_;
    }
    _has_bits_[0] |= cached_has_bits;
  }
}

void Cyclic::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.Cyclic)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Cyclic::CopyFrom(const Cyclic& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.Cyclic)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Cyclic::IsInitialized() const {
  if (has_m_book()) {
    if (!this->m_book_->IsInitialized()) return false;
  }
  if (has_m_cyclic()) {
    if (!this->m_cyclic_->IsInitialized()) return false;
  }
  return true;
}

void Cyclic::Swap(Cyclic* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Cyclic::InternalSwap(Cyclic* other) {
  using std::swap;
  CastToBase(&m_author_)->InternalSwap(CastToBase(&other->m_author_));
  m_str_.Swap(&other->m_str_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(m_book_, other->m_book_);
  swap(m_cyclic_, other->m_cyclic_);
  swap(m_int_, other->m_int_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata Cyclic::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void TestJsonName1::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestJsonName1::kOneValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestJsonName1::TestJsonName1()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_TestJsonName1.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.TestJsonName1)
}
TestJsonName1::TestJsonName1(const TestJsonName1& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  one_value_ = from.one_value_;
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.TestJsonName1)
}

void TestJsonName1::SharedCtor() {
  one_value_ = 0;
}

TestJsonName1::~TestJsonName1() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.TestJsonName1)
  SharedDtor();
}

void TestJsonName1::SharedDtor() {
}

void TestJsonName1::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestJsonName1::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestJsonName1& TestJsonName1::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_TestJsonName1.base);
  return *internal_default_instance();
}


void TestJsonName1::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.TestJsonName1)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  one_value_ = 0;
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool TestJsonName1::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.TestJsonName1)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional int32 one_value = 1[json_name = "value"];
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          set_has_one_value();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &one_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.TestJsonName1)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.TestJsonName1)
  return false;
#undef DO_
}

void TestJsonName1::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.TestJsonName1)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional int32 one_value = 1[json_name = "value"];
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->one_value(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.TestJsonName1)
}

::google::protobuf::uint8* TestJsonName1::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.TestJsonName1)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional int32 one_value = 1[json_name = "value"];
  if (cached_has_bits & 0x00000001u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->one_value(), target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.TestJsonName1)
  return target;
}

size_t TestJsonName1::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.TestJsonName1)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // optional int32 one_value = 1[json_name = "value"];
  if (has_one_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->one_value());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestJsonName1::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.TestJsonName1)
  GOOGLE_DCHECK_NE(&from, this);
  const TestJsonName1* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestJsonName1>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.TestJsonName1)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.TestJsonName1)
    MergeFrom(*source);
  }
}

void TestJsonName1::MergeFrom(const TestJsonName1& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.TestJsonName1)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_one_value()) {
    set_one_value(from.one_value());
  }
}

void TestJsonName1::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.TestJsonName1)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestJsonName1::CopyFrom(const TestJsonName1& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.TestJsonName1)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestJsonName1::IsInitialized() const {
  return true;
}

void TestJsonName1::Swap(TestJsonName1* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestJsonName1::InternalSwap(TestJsonName1* other) {
  using std::swap;
  swap(one_value_, other->one_value_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestJsonName1::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void TestJsonName2::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestJsonName2::kAnotherValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestJsonName2::TestJsonName2()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_TestJsonName2.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.protobuf.testing.TestJsonName2)
}
TestJsonName2::TestJsonName2(const TestJsonName2& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _has_bits_(from._has_bits_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  another_value_ = from.another_value_;
  // @@protoc_insertion_point(copy_constructor:google.protobuf.testing.TestJsonName2)
}

void TestJsonName2::SharedCtor() {
  another_value_ = 0;
}

TestJsonName2::~TestJsonName2() {
  // @@protoc_insertion_point(destructor:google.protobuf.testing.TestJsonName2)
  SharedDtor();
}

void TestJsonName2::SharedDtor() {
}

void TestJsonName2::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestJsonName2::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestJsonName2& TestJsonName2::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::scc_info_TestJsonName2.base);
  return *internal_default_instance();
}


void TestJsonName2::Clear() {
// @@protoc_insertion_point(message_clear_start:google.protobuf.testing.TestJsonName2)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  another_value_ = 0;
  _has_bits_.Clear();
  _internal_metadata_.Clear();
}

bool TestJsonName2::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.protobuf.testing.TestJsonName2)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // optional int32 another_value = 1[json_name = "value"];
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          set_has_another_value();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &another_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.protobuf.testing.TestJsonName2)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.protobuf.testing.TestJsonName2)
  return false;
#undef DO_
}

void TestJsonName2::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.protobuf.testing.TestJsonName2)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional int32 another_value = 1[json_name = "value"];
  if (cached_has_bits & 0x00000001u) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->another_value(), output);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        _internal_metadata_.unknown_fields(), output);
  }
  // @@protoc_insertion_point(serialize_end:google.protobuf.testing.TestJsonName2)
}

::google::protobuf::uint8* TestJsonName2::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.testing.TestJsonName2)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _has_bits_[0];
  // optional int32 another_value = 1[json_name = "value"];
  if (cached_has_bits & 0x00000001u) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->another_value(), target);
  }

  if (_internal_metadata_.have_unknown_fields()) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.testing.TestJsonName2)
  return target;
}

size_t TestJsonName2::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.protobuf.testing.TestJsonName2)
  size_t total_size = 0;

  if (_internal_metadata_.have_unknown_fields()) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        _internal_metadata_.unknown_fields());
  }
  // optional int32 another_value = 1[json_name = "value"];
  if (has_another_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->another_value());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestJsonName2::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.testing.TestJsonName2)
  GOOGLE_DCHECK_NE(&from, this);
  const TestJsonName2* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestJsonName2>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.testing.TestJsonName2)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.testing.TestJsonName2)
    MergeFrom(*source);
  }
}

void TestJsonName2::MergeFrom(const TestJsonName2& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.testing.TestJsonName2)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_another_value()) {
    set_another_value(from.another_value());
  }
}

void TestJsonName2::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.testing.TestJsonName2)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestJsonName2::CopyFrom(const TestJsonName2& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.testing.TestJsonName2)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestJsonName2::IsInitialized() const {
  return true;
}

void TestJsonName2::Swap(TestJsonName2* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestJsonName2::InternalSwap(TestJsonName2* other) {
  using std::swap;
  swap(another_value_, other->another_value_);
  swap(_has_bits_[0], other->_has_bits_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestJsonName2::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2finternal_2ftestdata_2fbooks_2eproto::file_level_metadata[kIndexInFileMessages];
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int NestedBook::kAnotherBookFieldNumber;
#endif
::google::protobuf::internal::ExtensionIdentifier< ::google::protobuf::testing::Book,
    ::google::protobuf::internal::MessageTypeTraits< ::google::protobuf::testing::NestedBook >, 11, false >
  NestedBook::another_book(kAnotherBookFieldNumber, *::google::protobuf::testing::NestedBook::internal_default_instance());
::google::protobuf::internal::ExtensionIdentifier< ::google::protobuf::testing::Book,
    ::google::protobuf::internal::RepeatedMessageTypeTraits< ::google::protobuf::testing::Author >, 11, false >
  more_author(kMoreAuthorFieldNumber, *::google::protobuf::testing::Author::internal_default_instance());

// @@protoc_insertion_point(namespace_scope)
}  // namespace testing
}  // namespace protobuf
}  // namespace google
namespace google {
namespace protobuf {
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Book_Data* Arena::CreateMaybeMessage< ::google::protobuf::testing::Book_Data >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Book_Data >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Book_Label* Arena::CreateMaybeMessage< ::google::protobuf::testing::Book_Label >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Book_Label >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Book* Arena::CreateMaybeMessage< ::google::protobuf::testing::Book >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Book >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Publisher* Arena::CreateMaybeMessage< ::google::protobuf::testing::Publisher >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Publisher >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Author* Arena::CreateMaybeMessage< ::google::protobuf::testing::Author >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Author >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::BadAuthor* Arena::CreateMaybeMessage< ::google::protobuf::testing::BadAuthor >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::BadAuthor >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Primitive* Arena::CreateMaybeMessage< ::google::protobuf::testing::Primitive >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Primitive >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::PackedPrimitive* Arena::CreateMaybeMessage< ::google::protobuf::testing::PackedPrimitive >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::PackedPrimitive >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::NestedBook* Arena::CreateMaybeMessage< ::google::protobuf::testing::NestedBook >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::NestedBook >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::BadNestedBook* Arena::CreateMaybeMessage< ::google::protobuf::testing::BadNestedBook >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::BadNestedBook >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::Cyclic* Arena::CreateMaybeMessage< ::google::protobuf::testing::Cyclic >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::Cyclic >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::TestJsonName1* Arena::CreateMaybeMessage< ::google::protobuf::testing::TestJsonName1 >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::TestJsonName1 >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::google::protobuf::testing::TestJsonName2* Arena::CreateMaybeMessage< ::google::protobuf::testing::TestJsonName2 >(Arena* arena) {
  return Arena::CreateInternal< ::google::protobuf::testing::TestJsonName2 >(arena);
}
}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)
