diff --git a/ipaacalib/cpp/CMakeLists.txt b/ipaacalib/cpp/CMakeLists.txt
index 85915b90493c3a54a2655955523801bccc917b9e..e19d222982e91efd3ea7a5ed1932706cccba89c9 100644
--- a/ipaacalib/cpp/CMakeLists.txt
+++ b/ipaacalib/cpp/CMakeLists.txt
@@ -151,11 +151,17 @@ set (SOURCE
 	build/ipaaca/ipaaca.pb.cc
 	)
 
+
+
+
 # compile all files to "ipaaca" shared library
 add_library(ipaaca SHARED ${SOURCE})
 # and link all the required external libs (found above using find_package etc.)
 target_link_libraries(ipaaca ${LIBS})
 
+#add_executable (ipaaca-test-main src/ipaaca-test-main.cc)
+#target_link_libraries (ipaaca-test-main ${LIBS})
+
 set(DEFAULT_BIN_SUBDIR bin)
 set(DEFAULT_LIB_SUBDIR lib)
 set(DEFAULT_DATA_SUBDIR share/data)
diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h
index 37ce8d14d6a15612e88220e341c6cc69aa5e2389..b60b0ba7d3fb77cccc0da72726818a69a628f102 100644
--- a/ipaacalib/cpp/include/ipaaca/ipaaca.h
+++ b/ipaacalib/cpp/include/ipaaca/ipaaca.h
@@ -379,10 +379,13 @@ IPAACA_HEADER_EXPORT class Buffer { //: public boost::enable_shared_from_this<Bu
 		IPAACA_MEMBER_VAR_EXPORT std::string _id_prefix;
 		IPAACA_MEMBER_VAR_EXPORT std::vector<IUEventHandler::ptr> _event_handlers;
 	protected:
+		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name) = 0;
+
+
 		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_link_update(IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name="undef") = 0;
 		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef") = 0;
 		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") = 0;
-		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_resendrequest(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") = 0;
+//		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_resendrequest(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") = 0;
 		IPAACA_HEADER_EXPORT void _allocate_unique_name(const std::string& basename, const std::string& function);
 		IPAACA_HEADER_EXPORT inline Buffer(const std::string& basename, const std::string& function) {
 			_allocate_unique_name(basename, function);
@@ -417,6 +420,8 @@ IPAACA_HEADER_EXPORT class OutputBuffer: public Buffer { //, public boost::enabl
 	protected:
 		// informing functions
 		IPAACA_HEADER_EXPORT void _send_iu_link_update(IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name="undef");
+IPAACA_HEADER_EXPORT void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name);
+
 		IPAACA_HEADER_EXPORT void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef");
 		IPAACA_HEADER_EXPORT void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name);
 		IPAACA_HEADER_EXPORT void _send_iu_resendrequest(IUInterface* iu, revision_t revision, const std::string& writer_name);
@@ -425,6 +430,7 @@ IPAACA_HEADER_EXPORT class OutputBuffer: public Buffer { //, public boost::enabl
 		// _remote_update_payload(IUPayloadUpdate)
 		// _remote_commit(protobuf::IUCommission)
 		IPAACA_HEADER_EXPORT void _publish_iu(boost::shared_ptr<IU> iu);
+
 		IPAACA_HEADER_EXPORT void _retract_iu(boost::shared_ptr<IU> iu);
 	protected:
 		IPAACA_HEADER_EXPORT OutputBuffer(const std::string& basename);
@@ -463,6 +469,10 @@ IPAACA_HEADER_EXPORT class InputBuffer: public Buffer { //, public boost::enable
 		{
 			IPAACA_WARNING("(ERROR) InputBuffer::_send_iu_link_update() should never be invoked")
 		}
+		IPAACA_HEADER_EXPORT inline void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name)
+		{
+			IPAACA_WARNING("(ERROR) InputBuffer::_publish_iu_resend() should never be invoked")
+		}
 		IPAACA_HEADER_EXPORT inline void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef")
 		{
 			IPAACA_WARNING("(ERROR) InputBuffer::_send_iu_payload_update() should never be invoked")
@@ -651,6 +661,8 @@ IPAACA_HEADER_EXPORT class IUInterface {//{{{
 		// setters
 		IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void commit() = 0;
 		// functions to modify and update links:
+		IPAACA_HEADER_EXPORT void _publish_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name);
+
 		IPAACA_HEADER_EXPORT void add_links(const std::string& type, const LinkSet& targets, const std::string& writer_name = "");
 		IPAACA_HEADER_EXPORT void remove_links(const std::string& type, const LinkSet& targets, const std::string& writer_name = "");
 		IPAACA_HEADER_EXPORT void modify_links(const LinkMap& add, const LinkMap& remove, const std::string& writer_name = "");
@@ -686,6 +698,9 @@ IPAACA_HEADER_EXPORT class IU: public IUInterface {//{{{
 		IPAACA_HEADER_EXPORT void commit();
 	protected:
 		IPAACA_HEADER_EXPORT virtual void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "");
+
+		IPAACA_HEADER_EXPORT virtual void _publish_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name);
+
 		IPAACA_HEADER_EXPORT virtual void _modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "");
 	protected:
 		IPAACA_HEADER_EXPORT virtual void _internal_commit(const std::string& writer_name = "");
diff --git a/ipaacalib/cpp/ipaaca.pb.cc b/ipaacalib/cpp/ipaaca.pb.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d40df61b71290c4595a34b89606078a7fb678085
--- /dev/null
+++ b/ipaacalib/cpp/ipaaca.pb.cc
@@ -0,0 +1,3600 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "ipaaca.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/once.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// @@protoc_insertion_point(includes)
+
+namespace ipaaca {
+namespace protobuf {
+
+namespace {
+
+const ::google::protobuf::Descriptor* IntMessage_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IntMessage_reflection_ = NULL;
+const ::google::protobuf::Descriptor* LinkSet_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  LinkSet_reflection_ = NULL;
+const ::google::protobuf::Descriptor* PayloadItem_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  PayloadItem_reflection_ = NULL;
+const ::google::protobuf::Descriptor* IU_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IU_reflection_ = NULL;
+const ::google::protobuf::EnumDescriptor* IU_AccessMode_descriptor_ = NULL;
+const ::google::protobuf::Descriptor* IUPayloadUpdate_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IUPayloadUpdate_reflection_ = NULL;
+const ::google::protobuf::Descriptor* IURetraction_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IURetraction_reflection_ = NULL;
+const ::google::protobuf::Descriptor* IUCommission_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IUCommission_reflection_ = NULL;
+const ::google::protobuf::Descriptor* IUResendRequest_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IUResendRequest_reflection_ = NULL;
+const ::google::protobuf::Descriptor* IULinkUpdate_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IULinkUpdate_reflection_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_ipaaca_2eproto() {
+  protobuf_AddDesc_ipaaca_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "ipaaca.proto");
+  GOOGLE_CHECK(file != NULL);
+  IntMessage_descriptor_ = file->message_type(0);
+  static const int IntMessage_offsets_[1] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IntMessage, value_),
+  };
+  IntMessage_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IntMessage_descriptor_,
+      IntMessage::default_instance_,
+      IntMessage_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IntMessage, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IntMessage, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IntMessage));
+  LinkSet_descriptor_ = file->message_type(1);
+  static const int LinkSet_offsets_[2] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LinkSet, type_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LinkSet, targets_),
+  };
+  LinkSet_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      LinkSet_descriptor_,
+      LinkSet::default_instance_,
+      LinkSet_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LinkSet, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LinkSet, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(LinkSet));
+  PayloadItem_descriptor_ = file->message_type(2);
+  static const int PayloadItem_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PayloadItem, key_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PayloadItem, value_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PayloadItem, type_),
+  };
+  PayloadItem_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      PayloadItem_descriptor_,
+      PayloadItem::default_instance_,
+      PayloadItem_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PayloadItem, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PayloadItem, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(PayloadItem));
+  IU_descriptor_ = file->message_type(3);
+  static const int IU_offsets_[10] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, uid_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, revision_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, category_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, payload_type_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, owner_name_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, committed_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, access_mode_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, read_only_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, payload_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, links_),
+  };
+  IU_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IU_descriptor_,
+      IU::default_instance_,
+      IU_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IU, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IU));
+  IU_AccessMode_descriptor_ = IU_descriptor_->enum_type(0);
+  IUPayloadUpdate_descriptor_ = file->message_type(4);
+  static const int IUPayloadUpdate_offsets_[6] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, uid_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, revision_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, new_items_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, keys_to_remove_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, is_delta_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, writer_name_),
+  };
+  IUPayloadUpdate_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IUPayloadUpdate_descriptor_,
+      IUPayloadUpdate::default_instance_,
+      IUPayloadUpdate_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUPayloadUpdate, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IUPayloadUpdate));
+  IURetraction_descriptor_ = file->message_type(5);
+  static const int IURetraction_offsets_[2] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IURetraction, uid_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IURetraction, revision_),
+  };
+  IURetraction_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IURetraction_descriptor_,
+      IURetraction::default_instance_,
+      IURetraction_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IURetraction, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IURetraction, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IURetraction));
+  IUCommission_descriptor_ = file->message_type(6);
+  static const int IUCommission_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUCommission, uid_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUCommission, revision_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUCommission, writer_name_),
+  };
+  IUCommission_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IUCommission_descriptor_,
+      IUCommission::default_instance_,
+      IUCommission_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUCommission, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUCommission, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IUCommission));
+  IUResendRequest_descriptor_ = file->message_type(7);
+  static const int IUResendRequest_offsets_[2] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUResendRequest, uid_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUResendRequest, hidden_scope_name_),
+  };
+  IUResendRequest_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IUResendRequest_descriptor_,
+      IUResendRequest::default_instance_,
+      IUResendRequest_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUResendRequest, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IUResendRequest, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IUResendRequest));
+  IULinkUpdate_descriptor_ = file->message_type(8);
+  static const int IULinkUpdate_offsets_[6] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, uid_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, revision_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, new_links_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, links_to_remove_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, is_delta_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, writer_name_),
+  };
+  IULinkUpdate_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      IULinkUpdate_descriptor_,
+      IULinkUpdate::default_instance_,
+      IULinkUpdate_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(IULinkUpdate, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(IULinkUpdate));
+}
+
+namespace {
+
+GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
+inline void protobuf_AssignDescriptorsOnce() {
+  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
+                 &protobuf_AssignDesc_ipaaca_2eproto);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IntMessage_descriptor_, &IntMessage::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    LinkSet_descriptor_, &LinkSet::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    PayloadItem_descriptor_, &PayloadItem::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IU_descriptor_, &IU::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IUPayloadUpdate_descriptor_, &IUPayloadUpdate::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IURetraction_descriptor_, &IURetraction::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IUCommission_descriptor_, &IUCommission::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IUResendRequest_descriptor_, &IUResendRequest::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    IULinkUpdate_descriptor_, &IULinkUpdate::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_ipaaca_2eproto() {
+  delete IntMessage::default_instance_;
+  delete IntMessage_reflection_;
+  delete LinkSet::default_instance_;
+  delete LinkSet_reflection_;
+  delete PayloadItem::default_instance_;
+  delete PayloadItem_reflection_;
+  delete IU::default_instance_;
+  delete IU_reflection_;
+  delete IUPayloadUpdate::default_instance_;
+  delete IUPayloadUpdate_reflection_;
+  delete IURetraction::default_instance_;
+  delete IURetraction_reflection_;
+  delete IUCommission::default_instance_;
+  delete IUCommission_reflection_;
+  delete IUResendRequest::default_instance_;
+  delete IUResendRequest_reflection_;
+  delete IULinkUpdate::default_instance_;
+  delete IULinkUpdate_reflection_;
+}
+
+void protobuf_AddDesc_ipaaca_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\014ipaaca.proto\022\017ipaaca.protobuf\"\033\n\nIntMe"
+    "ssage\022\r\n\005value\030\001 \002(\021\"(\n\007LinkSet\022\014\n\004type\030"
+    "\001 \002(\t\022\017\n\007targets\030\002 \003(\t\"<\n\013PayloadItem\022\013\n"
+    "\003key\030\001 \002(\t\022\r\n\005value\030\002 \002(\t\022\021\n\004type\030\003 \002(\t:"
+    "\003str\"\343\002\n\002IU\022\013\n\003uid\030\001 \002(\t\022\020\n\010revision\030\002 \002"
+    "(\r\022\027\n\010category\030\003 \002(\t:\005undef\022\031\n\014payload_t"
+    "ype\030\004 \002(\t:\003MAP\022\022\n\nowner_name\030\005 \002(\t\022\030\n\tco"
+    "mmitted\030\006 \002(\010:\005false\0229\n\013access_mode\030\007 \002("
+    "\0162\036.ipaaca.protobuf.IU.AccessMode:\004PUSH\022"
+    "\030\n\tread_only\030\010 \002(\010:\005false\022-\n\007payload\030\t \003"
+    "(\0132\034.ipaaca.protobuf.PayloadItem\022\'\n\005link"
+    "s\030\n \003(\0132\030.ipaaca.protobuf.LinkSet\"/\n\nAcc"
+    "essMode\022\010\n\004PUSH\020\000\022\n\n\006REMOTE\020\001\022\013\n\007MESSAGE"
+    "\020\002\"\247\001\n\017IUPayloadUpdate\022\013\n\003uid\030\001 \002(\t\022\020\n\010r"
+    "evision\030\002 \002(\r\022/\n\tnew_items\030\003 \003(\0132\034.ipaac"
+    "a.protobuf.PayloadItem\022\026\n\016keys_to_remove"
+    "\030\004 \003(\t\022\027\n\010is_delta\030\005 \002(\010:\005false\022\023\n\013write"
+    "r_name\030\006 \002(\t\"-\n\014IURetraction\022\013\n\003uid\030\001 \002("
+    "\t\022\020\n\010revision\030\002 \002(\r\"B\n\014IUCommission\022\013\n\003u"
+    "id\030\001 \002(\t\022\020\n\010revision\030\002 \002(\r\022\023\n\013writer_nam"
+    "e\030\003 \002(\t\"9\n\017IUResendRequest\022\013\n\003uid\030\001 \002(\t\022"
+    "\031\n\021hidden_scope_name\030\002 \002(\t\"\273\001\n\014IULinkUpd"
+    "ate\022\013\n\003uid\030\001 \002(\t\022\020\n\010revision\030\002 \002(\r\022+\n\tne"
+    "w_links\030\003 \003(\0132\030.ipaaca.protobuf.LinkSet\022"
+    "1\n\017links_to_remove\030\004 \003(\0132\030.ipaaca.protob"
+    "uf.LinkSet\022\027\n\010is_delta\030\005 \002(\010:\005false\022\023\n\013w"
+    "riter_name\030\006 \002(\t", 1056);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "ipaaca.proto", &protobuf_RegisterTypes);
+  IntMessage::default_instance_ = new IntMessage();
+  LinkSet::default_instance_ = new LinkSet();
+  PayloadItem::default_instance_ = new PayloadItem();
+  IU::default_instance_ = new IU();
+  IUPayloadUpdate::default_instance_ = new IUPayloadUpdate();
+  IURetraction::default_instance_ = new IURetraction();
+  IUCommission::default_instance_ = new IUCommission();
+  IUResendRequest::default_instance_ = new IUResendRequest();
+  IULinkUpdate::default_instance_ = new IULinkUpdate();
+  IntMessage::default_instance_->InitAsDefaultInstance();
+  LinkSet::default_instance_->InitAsDefaultInstance();
+  PayloadItem::default_instance_->InitAsDefaultInstance();
+  IU::default_instance_->InitAsDefaultInstance();
+  IUPayloadUpdate::default_instance_->InitAsDefaultInstance();
+  IURetraction::default_instance_->InitAsDefaultInstance();
+  IUCommission::default_instance_->InitAsDefaultInstance();
+  IUResendRequest::default_instance_->InitAsDefaultInstance();
+  IULinkUpdate::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_ipaaca_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_ipaaca_2eproto {
+  StaticDescriptorInitializer_ipaaca_2eproto() {
+    protobuf_AddDesc_ipaaca_2eproto();
+  }
+} static_descriptor_initializer_ipaaca_2eproto_;
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int IntMessage::kValueFieldNumber;
+#endif  // !_MSC_VER
+
+IntMessage::IntMessage()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IntMessage::InitAsDefaultInstance() {
+}
+
+IntMessage::IntMessage(const IntMessage& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IntMessage::SharedCtor() {
+  _cached_size_ = 0;
+  value_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IntMessage::~IntMessage() {
+  SharedDtor();
+}
+
+void IntMessage::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void IntMessage::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IntMessage::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IntMessage_descriptor_;
+}
+
+const IntMessage& IntMessage::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IntMessage* IntMessage::default_instance_ = NULL;
+
+IntMessage* IntMessage::New() const {
+  return new IntMessage;
+}
+
+void IntMessage::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    value_ = 0;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IntMessage::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required sint32 value = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
+                 input, &value_)));
+          set_has_value();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IntMessage::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required sint32 value = 1;
+  if (has_value()) {
+    ::google::protobuf::internal::WireFormatLite::WriteSInt32(1, this->value(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IntMessage::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required sint32 value = 1;
+  if (has_value()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteSInt32ToArray(1, this->value(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IntMessage::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required sint32 value = 1;
+    if (has_value()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::SInt32Size(
+          this->value());
+    }
+    
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IntMessage::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IntMessage* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IntMessage*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IntMessage::MergeFrom(const IntMessage& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_value()) {
+      set_value(from.value());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IntMessage::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IntMessage::CopyFrom(const IntMessage& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IntMessage::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
+  
+  return true;
+}
+
+void IntMessage::Swap(IntMessage* other) {
+  if (other != this) {
+    std::swap(value_, other->value_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IntMessage::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IntMessage_descriptor_;
+  metadata.reflection = IntMessage_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int LinkSet::kTypeFieldNumber;
+const int LinkSet::kTargetsFieldNumber;
+#endif  // !_MSC_VER
+
+LinkSet::LinkSet()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void LinkSet::InitAsDefaultInstance() {
+}
+
+LinkSet::LinkSet(const LinkSet& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void LinkSet::SharedCtor() {
+  _cached_size_ = 0;
+  type_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+LinkSet::~LinkSet() {
+  SharedDtor();
+}
+
+void LinkSet::SharedDtor() {
+  if (type_ != &::google::protobuf::internal::kEmptyString) {
+    delete type_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void LinkSet::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* LinkSet::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return LinkSet_descriptor_;
+}
+
+const LinkSet& LinkSet::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+LinkSet* LinkSet::default_instance_ = NULL;
+
+LinkSet* LinkSet::New() const {
+  return new LinkSet;
+}
+
+void LinkSet::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_type()) {
+      if (type_ != &::google::protobuf::internal::kEmptyString) {
+        type_->clear();
+      }
+    }
+  }
+  targets_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool LinkSet::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string type = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_type()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->type().data(), this->type().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_targets;
+        break;
+      }
+      
+      // repeated string targets = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_targets:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->add_targets()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->targets(0).data(), this->targets(0).length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_targets;
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void LinkSet::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string type = 1;
+  if (has_type()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->type().data(), this->type().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->type(), output);
+  }
+  
+  // repeated string targets = 2;
+  for (int i = 0; i < this->targets_size(); i++) {
+  ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+    this->targets(i).data(), this->targets(i).length(),
+    ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      2, this->targets(i), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* LinkSet::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string type = 1;
+  if (has_type()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->type().data(), this->type().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->type(), target);
+  }
+  
+  // repeated string targets = 2;
+  for (int i = 0; i < this->targets_size(); i++) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->targets(i).data(), this->targets(i).length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteStringToArray(2, this->targets(i), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int LinkSet::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string type = 1;
+    if (has_type()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->type());
+    }
+    
+  }
+  // repeated string targets = 2;
+  total_size += 1 * this->targets_size();
+  for (int i = 0; i < this->targets_size(); i++) {
+    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
+      this->targets(i));
+  }
+  
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void LinkSet::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const LinkSet* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const LinkSet*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void LinkSet::MergeFrom(const LinkSet& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  targets_.MergeFrom(from.targets_);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_type()) {
+      set_type(from.type());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void LinkSet::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void LinkSet::CopyFrom(const LinkSet& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool LinkSet::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
+  
+  return true;
+}
+
+void LinkSet::Swap(LinkSet* other) {
+  if (other != this) {
+    std::swap(type_, other->type_);
+    targets_.Swap(&other->targets_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata LinkSet::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = LinkSet_descriptor_;
+  metadata.reflection = LinkSet_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+const ::std::string PayloadItem::_default_type_("str");
+#ifndef _MSC_VER
+const int PayloadItem::kKeyFieldNumber;
+const int PayloadItem::kValueFieldNumber;
+const int PayloadItem::kTypeFieldNumber;
+#endif  // !_MSC_VER
+
+PayloadItem::PayloadItem()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void PayloadItem::InitAsDefaultInstance() {
+}
+
+PayloadItem::PayloadItem(const PayloadItem& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void PayloadItem::SharedCtor() {
+  _cached_size_ = 0;
+  key_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  value_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  type_ = const_cast< ::std::string*>(&_default_type_);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+PayloadItem::~PayloadItem() {
+  SharedDtor();
+}
+
+void PayloadItem::SharedDtor() {
+  if (key_ != &::google::protobuf::internal::kEmptyString) {
+    delete key_;
+  }
+  if (value_ != &::google::protobuf::internal::kEmptyString) {
+    delete value_;
+  }
+  if (type_ != &_default_type_) {
+    delete type_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void PayloadItem::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* PayloadItem::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return PayloadItem_descriptor_;
+}
+
+const PayloadItem& PayloadItem::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+PayloadItem* PayloadItem::default_instance_ = NULL;
+
+PayloadItem* PayloadItem::New() const {
+  return new PayloadItem;
+}
+
+void PayloadItem::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_key()) {
+      if (key_ != &::google::protobuf::internal::kEmptyString) {
+        key_->clear();
+      }
+    }
+    if (has_value()) {
+      if (value_ != &::google::protobuf::internal::kEmptyString) {
+        value_->clear();
+      }
+    }
+    if (has_type()) {
+      if (type_ != &_default_type_) {
+        type_->assign(_default_type_);
+      }
+    }
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool PayloadItem::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string key = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_key()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->key().data(), this->key().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_value;
+        break;
+      }
+      
+      // required string value = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_value:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_value()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->value().data(), this->value().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_type;
+        break;
+      }
+      
+      // required string type = 3 [default = "str"];
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_type:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_type()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->type().data(), this->type().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void PayloadItem::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string key = 1;
+  if (has_key()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->key().data(), this->key().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->key(), output);
+  }
+  
+  // required string value = 2;
+  if (has_value()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->value().data(), this->value().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      2, this->value(), output);
+  }
+  
+  // required string type = 3 [default = "str"];
+  if (has_type()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->type().data(), this->type().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      3, this->type(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* PayloadItem::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string key = 1;
+  if (has_key()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->key().data(), this->key().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->key(), target);
+  }
+  
+  // required string value = 2;
+  if (has_value()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->value().data(), this->value().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->value(), target);
+  }
+  
+  // required string type = 3 [default = "str"];
+  if (has_type()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->type().data(), this->type().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->type(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int PayloadItem::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string key = 1;
+    if (has_key()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->key());
+    }
+    
+    // required string value = 2;
+    if (has_value()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->value());
+    }
+    
+    // required string type = 3 [default = "str"];
+    if (has_type()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->type());
+    }
+    
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void PayloadItem::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const PayloadItem* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const PayloadItem*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void PayloadItem::MergeFrom(const PayloadItem& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_key()) {
+      set_key(from.key());
+    }
+    if (from.has_value()) {
+      set_value(from.value());
+    }
+    if (from.has_type()) {
+      set_type(from.type());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void PayloadItem::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void PayloadItem::CopyFrom(const PayloadItem& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool PayloadItem::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false;
+  
+  return true;
+}
+
+void PayloadItem::Swap(PayloadItem* other) {
+  if (other != this) {
+    std::swap(key_, other->key_);
+    std::swap(value_, other->value_);
+    std::swap(type_, other->type_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata PayloadItem::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = PayloadItem_descriptor_;
+  metadata.reflection = PayloadItem_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+const ::google::protobuf::EnumDescriptor* IU_AccessMode_descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IU_AccessMode_descriptor_;
+}
+bool IU_AccessMode_IsValid(int value) {
+  switch(value) {
+    case 0:
+    case 1:
+    case 2:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#ifndef _MSC_VER
+const IU_AccessMode IU::PUSH;
+const IU_AccessMode IU::REMOTE;
+const IU_AccessMode IU::MESSAGE;
+const IU_AccessMode IU::AccessMode_MIN;
+const IU_AccessMode IU::AccessMode_MAX;
+const int IU::AccessMode_ARRAYSIZE;
+#endif  // _MSC_VER
+const ::std::string IU::_default_category_("undef");
+const ::std::string IU::_default_payload_type_("MAP");
+#ifndef _MSC_VER
+const int IU::kUidFieldNumber;
+const int IU::kRevisionFieldNumber;
+const int IU::kCategoryFieldNumber;
+const int IU::kPayloadTypeFieldNumber;
+const int IU::kOwnerNameFieldNumber;
+const int IU::kCommittedFieldNumber;
+const int IU::kAccessModeFieldNumber;
+const int IU::kReadOnlyFieldNumber;
+const int IU::kPayloadFieldNumber;
+const int IU::kLinksFieldNumber;
+#endif  // !_MSC_VER
+
+IU::IU()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IU::InitAsDefaultInstance() {
+}
+
+IU::IU(const IU& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IU::SharedCtor() {
+  _cached_size_ = 0;
+  uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  revision_ = 0u;
+  category_ = const_cast< ::std::string*>(&_default_category_);
+  payload_type_ = const_cast< ::std::string*>(&_default_payload_type_);
+  owner_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  committed_ = false;
+  access_mode_ = 0;
+  read_only_ = false;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IU::~IU() {
+  SharedDtor();
+}
+
+void IU::SharedDtor() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    delete uid_;
+  }
+  if (category_ != &_default_category_) {
+    delete category_;
+  }
+  if (payload_type_ != &_default_payload_type_) {
+    delete payload_type_;
+  }
+  if (owner_name_ != &::google::protobuf::internal::kEmptyString) {
+    delete owner_name_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void IU::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IU::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IU_descriptor_;
+}
+
+const IU& IU::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IU* IU::default_instance_ = NULL;
+
+IU* IU::New() const {
+  return new IU;
+}
+
+void IU::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_uid()) {
+      if (uid_ != &::google::protobuf::internal::kEmptyString) {
+        uid_->clear();
+      }
+    }
+    revision_ = 0u;
+    if (has_category()) {
+      if (category_ != &_default_category_) {
+        category_->assign(_default_category_);
+      }
+    }
+    if (has_payload_type()) {
+      if (payload_type_ != &_default_payload_type_) {
+        payload_type_->assign(_default_payload_type_);
+      }
+    }
+    if (has_owner_name()) {
+      if (owner_name_ != &::google::protobuf::internal::kEmptyString) {
+        owner_name_->clear();
+      }
+    }
+    committed_ = false;
+    access_mode_ = 0;
+    read_only_ = false;
+  }
+  payload_.Clear();
+  links_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IU::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string uid = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_uid()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->uid().data(), this->uid().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_revision;
+        break;
+      }
+      
+      // required uint32 revision = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_revision:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
+                 input, &revision_)));
+          set_has_revision();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_category;
+        break;
+      }
+      
+      // required string category = 3 [default = "undef"];
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_category:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_category()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->category().data(), this->category().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(34)) goto parse_payload_type;
+        break;
+      }
+      
+      // required string payload_type = 4 [default = "MAP"];
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_payload_type:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_payload_type()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->payload_type().data(), this->payload_type().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(42)) goto parse_owner_name;
+        break;
+      }
+      
+      // required string owner_name = 5;
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_owner_name:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_owner_name()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->owner_name().data(), this->owner_name().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(48)) goto parse_committed;
+        break;
+      }
+      
+      // required bool committed = 6 [default = false];
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_committed:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &committed_)));
+          set_has_committed();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(56)) goto parse_access_mode;
+        break;
+      }
+      
+      // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+      case 7: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_access_mode:
+          int value;
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
+                 input, &value)));
+          if (::ipaaca::protobuf::IU_AccessMode_IsValid(value)) {
+            set_access_mode(static_cast< ::ipaaca::protobuf::IU_AccessMode >(value));
+          } else {
+            mutable_unknown_fields()->AddVarint(7, value);
+          }
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(64)) goto parse_read_only;
+        break;
+      }
+      
+      // required bool read_only = 8 [default = false];
+      case 8: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_read_only:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &read_only_)));
+          set_has_read_only();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(74)) goto parse_payload;
+        break;
+      }
+      
+      // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+      case 9: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_payload:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_payload()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(74)) goto parse_payload;
+        if (input->ExpectTag(82)) goto parse_links;
+        break;
+      }
+      
+      // repeated .ipaaca.protobuf.LinkSet links = 10;
+      case 10: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_links:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_links()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(82)) goto parse_links;
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IU::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->uid(), output);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->revision(), output);
+  }
+  
+  // required string category = 3 [default = "undef"];
+  if (has_category()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->category().data(), this->category().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      3, this->category(), output);
+  }
+  
+  // required string payload_type = 4 [default = "MAP"];
+  if (has_payload_type()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->payload_type().data(), this->payload_type().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      4, this->payload_type(), output);
+  }
+  
+  // required string owner_name = 5;
+  if (has_owner_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->owner_name().data(), this->owner_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      5, this->owner_name(), output);
+  }
+  
+  // required bool committed = 6 [default = false];
+  if (has_committed()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(6, this->committed(), output);
+  }
+  
+  // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+  if (has_access_mode()) {
+    ::google::protobuf::internal::WireFormatLite::WriteEnum(
+      7, this->access_mode(), output);
+  }
+  
+  // required bool read_only = 8 [default = false];
+  if (has_read_only()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(8, this->read_only(), output);
+  }
+  
+  // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+  for (int i = 0; i < this->payload_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      9, this->payload(i), output);
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet links = 10;
+  for (int i = 0; i < this->links_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      10, this->links(i), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IU::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->uid(), target);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->revision(), target);
+  }
+  
+  // required string category = 3 [default = "undef"];
+  if (has_category()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->category().data(), this->category().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->category(), target);
+  }
+  
+  // required string payload_type = 4 [default = "MAP"];
+  if (has_payload_type()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->payload_type().data(), this->payload_type().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        4, this->payload_type(), target);
+  }
+  
+  // required string owner_name = 5;
+  if (has_owner_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->owner_name().data(), this->owner_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->owner_name(), target);
+  }
+  
+  // required bool committed = 6 [default = false];
+  if (has_committed()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(6, this->committed(), target);
+  }
+  
+  // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+  if (has_access_mode()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
+      7, this->access_mode(), target);
+  }
+  
+  // required bool read_only = 8 [default = false];
+  if (has_read_only()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(8, this->read_only(), target);
+  }
+  
+  // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+  for (int i = 0; i < this->payload_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        9, this->payload(i), target);
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet links = 10;
+  for (int i = 0; i < this->links_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        10, this->links(i), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IU::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string uid = 1;
+    if (has_uid()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->uid());
+    }
+    
+    // required uint32 revision = 2;
+    if (has_revision()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::UInt32Size(
+          this->revision());
+    }
+    
+    // required string category = 3 [default = "undef"];
+    if (has_category()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->category());
+    }
+    
+    // required string payload_type = 4 [default = "MAP"];
+    if (has_payload_type()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->payload_type());
+    }
+    
+    // required string owner_name = 5;
+    if (has_owner_name()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->owner_name());
+    }
+    
+    // required bool committed = 6 [default = false];
+    if (has_committed()) {
+      total_size += 1 + 1;
+    }
+    
+    // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+    if (has_access_mode()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::EnumSize(this->access_mode());
+    }
+    
+    // required bool read_only = 8 [default = false];
+    if (has_read_only()) {
+      total_size += 1 + 1;
+    }
+    
+  }
+  // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+  total_size += 1 * this->payload_size();
+  for (int i = 0; i < this->payload_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->payload(i));
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet links = 10;
+  total_size += 1 * this->links_size();
+  for (int i = 0; i < this->links_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->links(i));
+  }
+  
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IU::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IU* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IU*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IU::MergeFrom(const IU& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  payload_.MergeFrom(from.payload_);
+  links_.MergeFrom(from.links_);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_uid()) {
+      set_uid(from.uid());
+    }
+    if (from.has_revision()) {
+      set_revision(from.revision());
+    }
+    if (from.has_category()) {
+      set_category(from.category());
+    }
+    if (from.has_payload_type()) {
+      set_payload_type(from.payload_type());
+    }
+    if (from.has_owner_name()) {
+      set_owner_name(from.owner_name());
+    }
+    if (from.has_committed()) {
+      set_committed(from.committed());
+    }
+    if (from.has_access_mode()) {
+      set_access_mode(from.access_mode());
+    }
+    if (from.has_read_only()) {
+      set_read_only(from.read_only());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IU::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IU::CopyFrom(const IU& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IU::IsInitialized() const {
+  if ((_has_bits_[0] & 0x000000ff) != 0x000000ff) return false;
+  
+  for (int i = 0; i < payload_size(); i++) {
+    if (!this->payload(i).IsInitialized()) return false;
+  }
+  for (int i = 0; i < links_size(); i++) {
+    if (!this->links(i).IsInitialized()) return false;
+  }
+  return true;
+}
+
+void IU::Swap(IU* other) {
+  if (other != this) {
+    std::swap(uid_, other->uid_);
+    std::swap(revision_, other->revision_);
+    std::swap(category_, other->category_);
+    std::swap(payload_type_, other->payload_type_);
+    std::swap(owner_name_, other->owner_name_);
+    std::swap(committed_, other->committed_);
+    std::swap(access_mode_, other->access_mode_);
+    std::swap(read_only_, other->read_only_);
+    payload_.Swap(&other->payload_);
+    links_.Swap(&other->links_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IU::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IU_descriptor_;
+  metadata.reflection = IU_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int IUPayloadUpdate::kUidFieldNumber;
+const int IUPayloadUpdate::kRevisionFieldNumber;
+const int IUPayloadUpdate::kNewItemsFieldNumber;
+const int IUPayloadUpdate::kKeysToRemoveFieldNumber;
+const int IUPayloadUpdate::kIsDeltaFieldNumber;
+const int IUPayloadUpdate::kWriterNameFieldNumber;
+#endif  // !_MSC_VER
+
+IUPayloadUpdate::IUPayloadUpdate()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IUPayloadUpdate::InitAsDefaultInstance() {
+}
+
+IUPayloadUpdate::IUPayloadUpdate(const IUPayloadUpdate& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IUPayloadUpdate::SharedCtor() {
+  _cached_size_ = 0;
+  uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  revision_ = 0u;
+  is_delta_ = false;
+  writer_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IUPayloadUpdate::~IUPayloadUpdate() {
+  SharedDtor();
+}
+
+void IUPayloadUpdate::SharedDtor() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    delete uid_;
+  }
+  if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+    delete writer_name_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void IUPayloadUpdate::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IUPayloadUpdate::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IUPayloadUpdate_descriptor_;
+}
+
+const IUPayloadUpdate& IUPayloadUpdate::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IUPayloadUpdate* IUPayloadUpdate::default_instance_ = NULL;
+
+IUPayloadUpdate* IUPayloadUpdate::New() const {
+  return new IUPayloadUpdate;
+}
+
+void IUPayloadUpdate::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_uid()) {
+      if (uid_ != &::google::protobuf::internal::kEmptyString) {
+        uid_->clear();
+      }
+    }
+    revision_ = 0u;
+    is_delta_ = false;
+    if (has_writer_name()) {
+      if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+        writer_name_->clear();
+      }
+    }
+  }
+  new_items_.Clear();
+  keys_to_remove_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IUPayloadUpdate::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string uid = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_uid()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->uid().data(), this->uid().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_revision;
+        break;
+      }
+      
+      // required uint32 revision = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_revision:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
+                 input, &revision_)));
+          set_has_revision();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_new_items;
+        break;
+      }
+      
+      // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_new_items:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_new_items()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_new_items;
+        if (input->ExpectTag(34)) goto parse_keys_to_remove;
+        break;
+      }
+      
+      // repeated string keys_to_remove = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_keys_to_remove:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->add_keys_to_remove()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->keys_to_remove(0).data(), this->keys_to_remove(0).length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(34)) goto parse_keys_to_remove;
+        if (input->ExpectTag(40)) goto parse_is_delta;
+        break;
+      }
+      
+      // required bool is_delta = 5 [default = false];
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_is_delta:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &is_delta_)));
+          set_has_is_delta();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(50)) goto parse_writer_name;
+        break;
+      }
+      
+      // required string writer_name = 6;
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_writer_name:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_writer_name()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->writer_name().data(), this->writer_name().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IUPayloadUpdate::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->uid(), output);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->revision(), output);
+  }
+  
+  // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+  for (int i = 0; i < this->new_items_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      3, this->new_items(i), output);
+  }
+  
+  // repeated string keys_to_remove = 4;
+  for (int i = 0; i < this->keys_to_remove_size(); i++) {
+  ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+    this->keys_to_remove(i).data(), this->keys_to_remove(i).length(),
+    ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      4, this->keys_to_remove(i), output);
+  }
+  
+  // required bool is_delta = 5 [default = false];
+  if (has_is_delta()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->is_delta(), output);
+  }
+  
+  // required string writer_name = 6;
+  if (has_writer_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->writer_name().data(), this->writer_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      6, this->writer_name(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IUPayloadUpdate::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->uid(), target);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->revision(), target);
+  }
+  
+  // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+  for (int i = 0; i < this->new_items_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        3, this->new_items(i), target);
+  }
+  
+  // repeated string keys_to_remove = 4;
+  for (int i = 0; i < this->keys_to_remove_size(); i++) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->keys_to_remove(i).data(), this->keys_to_remove(i).length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteStringToArray(4, this->keys_to_remove(i), target);
+  }
+  
+  // required bool is_delta = 5 [default = false];
+  if (has_is_delta()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->is_delta(), target);
+  }
+  
+  // required string writer_name = 6;
+  if (has_writer_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->writer_name().data(), this->writer_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        6, this->writer_name(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IUPayloadUpdate::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string uid = 1;
+    if (has_uid()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->uid());
+    }
+    
+    // required uint32 revision = 2;
+    if (has_revision()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::UInt32Size(
+          this->revision());
+    }
+    
+    // required bool is_delta = 5 [default = false];
+    if (has_is_delta()) {
+      total_size += 1 + 1;
+    }
+    
+    // required string writer_name = 6;
+    if (has_writer_name()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->writer_name());
+    }
+    
+  }
+  // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+  total_size += 1 * this->new_items_size();
+  for (int i = 0; i < this->new_items_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->new_items(i));
+  }
+  
+  // repeated string keys_to_remove = 4;
+  total_size += 1 * this->keys_to_remove_size();
+  for (int i = 0; i < this->keys_to_remove_size(); i++) {
+    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
+      this->keys_to_remove(i));
+  }
+  
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IUPayloadUpdate::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IUPayloadUpdate* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IUPayloadUpdate*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IUPayloadUpdate::MergeFrom(const IUPayloadUpdate& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  new_items_.MergeFrom(from.new_items_);
+  keys_to_remove_.MergeFrom(from.keys_to_remove_);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_uid()) {
+      set_uid(from.uid());
+    }
+    if (from.has_revision()) {
+      set_revision(from.revision());
+    }
+    if (from.has_is_delta()) {
+      set_is_delta(from.is_delta());
+    }
+    if (from.has_writer_name()) {
+      set_writer_name(from.writer_name());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IUPayloadUpdate::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IUPayloadUpdate::CopyFrom(const IUPayloadUpdate& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IUPayloadUpdate::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000033) != 0x00000033) return false;
+  
+  for (int i = 0; i < new_items_size(); i++) {
+    if (!this->new_items(i).IsInitialized()) return false;
+  }
+  return true;
+}
+
+void IUPayloadUpdate::Swap(IUPayloadUpdate* other) {
+  if (other != this) {
+    std::swap(uid_, other->uid_);
+    std::swap(revision_, other->revision_);
+    new_items_.Swap(&other->new_items_);
+    keys_to_remove_.Swap(&other->keys_to_remove_);
+    std::swap(is_delta_, other->is_delta_);
+    std::swap(writer_name_, other->writer_name_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IUPayloadUpdate::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IUPayloadUpdate_descriptor_;
+  metadata.reflection = IUPayloadUpdate_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int IURetraction::kUidFieldNumber;
+const int IURetraction::kRevisionFieldNumber;
+#endif  // !_MSC_VER
+
+IURetraction::IURetraction()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IURetraction::InitAsDefaultInstance() {
+}
+
+IURetraction::IURetraction(const IURetraction& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IURetraction::SharedCtor() {
+  _cached_size_ = 0;
+  uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  revision_ = 0u;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IURetraction::~IURetraction() {
+  SharedDtor();
+}
+
+void IURetraction::SharedDtor() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    delete uid_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void IURetraction::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IURetraction::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IURetraction_descriptor_;
+}
+
+const IURetraction& IURetraction::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IURetraction* IURetraction::default_instance_ = NULL;
+
+IURetraction* IURetraction::New() const {
+  return new IURetraction;
+}
+
+void IURetraction::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_uid()) {
+      if (uid_ != &::google::protobuf::internal::kEmptyString) {
+        uid_->clear();
+      }
+    }
+    revision_ = 0u;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IURetraction::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string uid = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_uid()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->uid().data(), this->uid().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_revision;
+        break;
+      }
+      
+      // required uint32 revision = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_revision:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
+                 input, &revision_)));
+          set_has_revision();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IURetraction::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->uid(), output);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->revision(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IURetraction::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->uid(), target);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->revision(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IURetraction::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string uid = 1;
+    if (has_uid()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->uid());
+    }
+    
+    // required uint32 revision = 2;
+    if (has_revision()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::UInt32Size(
+          this->revision());
+    }
+    
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IURetraction::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IURetraction* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IURetraction*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IURetraction::MergeFrom(const IURetraction& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_uid()) {
+      set_uid(from.uid());
+    }
+    if (from.has_revision()) {
+      set_revision(from.revision());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IURetraction::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IURetraction::CopyFrom(const IURetraction& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IURetraction::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
+  
+  return true;
+}
+
+void IURetraction::Swap(IURetraction* other) {
+  if (other != this) {
+    std::swap(uid_, other->uid_);
+    std::swap(revision_, other->revision_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IURetraction::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IURetraction_descriptor_;
+  metadata.reflection = IURetraction_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int IUCommission::kUidFieldNumber;
+const int IUCommission::kRevisionFieldNumber;
+const int IUCommission::kWriterNameFieldNumber;
+#endif  // !_MSC_VER
+
+IUCommission::IUCommission()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IUCommission::InitAsDefaultInstance() {
+}
+
+IUCommission::IUCommission(const IUCommission& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IUCommission::SharedCtor() {
+  _cached_size_ = 0;
+  uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  revision_ = 0u;
+  writer_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IUCommission::~IUCommission() {
+  SharedDtor();
+}
+
+void IUCommission::SharedDtor() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    delete uid_;
+  }
+  if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+    delete writer_name_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void IUCommission::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IUCommission::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IUCommission_descriptor_;
+}
+
+const IUCommission& IUCommission::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IUCommission* IUCommission::default_instance_ = NULL;
+
+IUCommission* IUCommission::New() const {
+  return new IUCommission;
+}
+
+void IUCommission::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_uid()) {
+      if (uid_ != &::google::protobuf::internal::kEmptyString) {
+        uid_->clear();
+      }
+    }
+    revision_ = 0u;
+    if (has_writer_name()) {
+      if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+        writer_name_->clear();
+      }
+    }
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IUCommission::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string uid = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_uid()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->uid().data(), this->uid().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_revision;
+        break;
+      }
+      
+      // required uint32 revision = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_revision:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
+                 input, &revision_)));
+          set_has_revision();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_writer_name;
+        break;
+      }
+      
+      // required string writer_name = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_writer_name:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_writer_name()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->writer_name().data(), this->writer_name().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IUCommission::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->uid(), output);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->revision(), output);
+  }
+  
+  // required string writer_name = 3;
+  if (has_writer_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->writer_name().data(), this->writer_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      3, this->writer_name(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IUCommission::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->uid(), target);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->revision(), target);
+  }
+  
+  // required string writer_name = 3;
+  if (has_writer_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->writer_name().data(), this->writer_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->writer_name(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IUCommission::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string uid = 1;
+    if (has_uid()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->uid());
+    }
+    
+    // required uint32 revision = 2;
+    if (has_revision()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::UInt32Size(
+          this->revision());
+    }
+    
+    // required string writer_name = 3;
+    if (has_writer_name()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->writer_name());
+    }
+    
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IUCommission::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IUCommission* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IUCommission*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IUCommission::MergeFrom(const IUCommission& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_uid()) {
+      set_uid(from.uid());
+    }
+    if (from.has_revision()) {
+      set_revision(from.revision());
+    }
+    if (from.has_writer_name()) {
+      set_writer_name(from.writer_name());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IUCommission::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IUCommission::CopyFrom(const IUCommission& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IUCommission::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false;
+  
+  return true;
+}
+
+void IUCommission::Swap(IUCommission* other) {
+  if (other != this) {
+    std::swap(uid_, other->uid_);
+    std::swap(revision_, other->revision_);
+    std::swap(writer_name_, other->writer_name_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IUCommission::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IUCommission_descriptor_;
+  metadata.reflection = IUCommission_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int IUResendRequest::kUidFieldNumber;
+const int IUResendRequest::kHiddenScopeNameFieldNumber;
+#endif  // !_MSC_VER
+
+IUResendRequest::IUResendRequest()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IUResendRequest::InitAsDefaultInstance() {
+}
+
+IUResendRequest::IUResendRequest(const IUResendRequest& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IUResendRequest::SharedCtor() {
+  _cached_size_ = 0;
+  uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  hidden_scope_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IUResendRequest::~IUResendRequest() {
+  SharedDtor();
+}
+
+void IUResendRequest::SharedDtor() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    delete uid_;
+  }
+  if (hidden_scope_name_ != &::google::protobuf::internal::kEmptyString) {
+    delete hidden_scope_name_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void IUResendRequest::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IUResendRequest::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IUResendRequest_descriptor_;
+}
+
+const IUResendRequest& IUResendRequest::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IUResendRequest* IUResendRequest::default_instance_ = NULL;
+
+IUResendRequest* IUResendRequest::New() const {
+  return new IUResendRequest;
+}
+
+void IUResendRequest::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_uid()) {
+      if (uid_ != &::google::protobuf::internal::kEmptyString) {
+        uid_->clear();
+      }
+    }
+    if (has_hidden_scope_name()) {
+      if (hidden_scope_name_ != &::google::protobuf::internal::kEmptyString) {
+        hidden_scope_name_->clear();
+      }
+    }
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IUResendRequest::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string uid = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_uid()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->uid().data(), this->uid().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_hidden_scope_name;
+        break;
+      }
+      
+      // required string hidden_scope_name = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_hidden_scope_name:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_hidden_scope_name()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->hidden_scope_name().data(), this->hidden_scope_name().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IUResendRequest::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->uid(), output);
+  }
+  
+  // required string hidden_scope_name = 2;
+  if (has_hidden_scope_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->hidden_scope_name().data(), this->hidden_scope_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      2, this->hidden_scope_name(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IUResendRequest::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->uid(), target);
+  }
+  
+  // required string hidden_scope_name = 2;
+  if (has_hidden_scope_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->hidden_scope_name().data(), this->hidden_scope_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->hidden_scope_name(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IUResendRequest::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string uid = 1;
+    if (has_uid()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->uid());
+    }
+    
+    // required string hidden_scope_name = 2;
+    if (has_hidden_scope_name()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->hidden_scope_name());
+    }
+    
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IUResendRequest::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IUResendRequest* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IUResendRequest*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IUResendRequest::MergeFrom(const IUResendRequest& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_uid()) {
+      set_uid(from.uid());
+    }
+    if (from.has_hidden_scope_name()) {
+      set_hidden_scope_name(from.hidden_scope_name());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IUResendRequest::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IUResendRequest::CopyFrom(const IUResendRequest& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IUResendRequest::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
+  
+  return true;
+}
+
+void IUResendRequest::Swap(IUResendRequest* other) {
+  if (other != this) {
+    std::swap(uid_, other->uid_);
+    std::swap(hidden_scope_name_, other->hidden_scope_name_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IUResendRequest::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IUResendRequest_descriptor_;
+  metadata.reflection = IUResendRequest_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int IULinkUpdate::kUidFieldNumber;
+const int IULinkUpdate::kRevisionFieldNumber;
+const int IULinkUpdate::kNewLinksFieldNumber;
+const int IULinkUpdate::kLinksToRemoveFieldNumber;
+const int IULinkUpdate::kIsDeltaFieldNumber;
+const int IULinkUpdate::kWriterNameFieldNumber;
+#endif  // !_MSC_VER
+
+IULinkUpdate::IULinkUpdate()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void IULinkUpdate::InitAsDefaultInstance() {
+}
+
+IULinkUpdate::IULinkUpdate(const IULinkUpdate& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void IULinkUpdate::SharedCtor() {
+  _cached_size_ = 0;
+  uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  revision_ = 0u;
+  is_delta_ = false;
+  writer_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+IULinkUpdate::~IULinkUpdate() {
+  SharedDtor();
+}
+
+void IULinkUpdate::SharedDtor() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    delete uid_;
+  }
+  if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+    delete writer_name_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void IULinkUpdate::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* IULinkUpdate::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return IULinkUpdate_descriptor_;
+}
+
+const IULinkUpdate& IULinkUpdate::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_ipaaca_2eproto();  return *default_instance_;
+}
+
+IULinkUpdate* IULinkUpdate::default_instance_ = NULL;
+
+IULinkUpdate* IULinkUpdate::New() const {
+  return new IULinkUpdate;
+}
+
+void IULinkUpdate::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_uid()) {
+      if (uid_ != &::google::protobuf::internal::kEmptyString) {
+        uid_->clear();
+      }
+    }
+    revision_ = 0u;
+    is_delta_ = false;
+    if (has_writer_name()) {
+      if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+        writer_name_->clear();
+      }
+    }
+  }
+  new_links_.Clear();
+  links_to_remove_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool IULinkUpdate::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // required string uid = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_uid()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->uid().data(), this->uid().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_revision;
+        break;
+      }
+      
+      // required uint32 revision = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_revision:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
+                 input, &revision_)));
+          set_has_revision();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_new_links;
+        break;
+      }
+      
+      // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_new_links:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_new_links()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_new_links;
+        if (input->ExpectTag(34)) goto parse_links_to_remove;
+        break;
+      }
+      
+      // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_links_to_remove:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_links_to_remove()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(34)) goto parse_links_to_remove;
+        if (input->ExpectTag(40)) goto parse_is_delta;
+        break;
+      }
+      
+      // required bool is_delta = 5 [default = false];
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_is_delta:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &is_delta_)));
+          set_has_is_delta();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(50)) goto parse_writer_name;
+        break;
+      }
+      
+      // required string writer_name = 6;
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_writer_name:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_writer_name()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->writer_name().data(), this->writer_name().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+      
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void IULinkUpdate::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->uid(), output);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    ::google::protobuf::internal::WireFormatLite::WriteUInt32(2, this->revision(), output);
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+  for (int i = 0; i < this->new_links_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      3, this->new_links(i), output);
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+  for (int i = 0; i < this->links_to_remove_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      4, this->links_to_remove(i), output);
+  }
+  
+  // required bool is_delta = 5 [default = false];
+  if (has_is_delta()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->is_delta(), output);
+  }
+  
+  // required string writer_name = 6;
+  if (has_writer_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->writer_name().data(), this->writer_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      6, this->writer_name(), output);
+  }
+  
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* IULinkUpdate::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // required string uid = 1;
+  if (has_uid()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->uid().data(), this->uid().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->uid(), target);
+  }
+  
+  // required uint32 revision = 2;
+  if (has_revision()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(2, this->revision(), target);
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+  for (int i = 0; i < this->new_links_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        3, this->new_links(i), target);
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+  for (int i = 0; i < this->links_to_remove_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        4, this->links_to_remove(i), target);
+  }
+  
+  // required bool is_delta = 5 [default = false];
+  if (has_is_delta()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->is_delta(), target);
+  }
+  
+  // required string writer_name = 6;
+  if (has_writer_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->writer_name().data(), this->writer_name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        6, this->writer_name(), target);
+  }
+  
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int IULinkUpdate::ByteSize() const {
+  int total_size = 0;
+  
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // required string uid = 1;
+    if (has_uid()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->uid());
+    }
+    
+    // required uint32 revision = 2;
+    if (has_revision()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::UInt32Size(
+          this->revision());
+    }
+    
+    // required bool is_delta = 5 [default = false];
+    if (has_is_delta()) {
+      total_size += 1 + 1;
+    }
+    
+    // required string writer_name = 6;
+    if (has_writer_name()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->writer_name());
+    }
+    
+  }
+  // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+  total_size += 1 * this->new_links_size();
+  for (int i = 0; i < this->new_links_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->new_links(i));
+  }
+  
+  // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+  total_size += 1 * this->links_to_remove_size();
+  for (int i = 0; i < this->links_to_remove_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->links_to_remove(i));
+  }
+  
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void IULinkUpdate::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const IULinkUpdate* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const IULinkUpdate*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void IULinkUpdate::MergeFrom(const IULinkUpdate& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  new_links_.MergeFrom(from.new_links_);
+  links_to_remove_.MergeFrom(from.links_to_remove_);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_uid()) {
+      set_uid(from.uid());
+    }
+    if (from.has_revision()) {
+      set_revision(from.revision());
+    }
+    if (from.has_is_delta()) {
+      set_is_delta(from.is_delta());
+    }
+    if (from.has_writer_name()) {
+      set_writer_name(from.writer_name());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void IULinkUpdate::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IULinkUpdate::CopyFrom(const IULinkUpdate& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IULinkUpdate::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000033) != 0x00000033) return false;
+  
+  for (int i = 0; i < new_links_size(); i++) {
+    if (!this->new_links(i).IsInitialized()) return false;
+  }
+  for (int i = 0; i < links_to_remove_size(); i++) {
+    if (!this->links_to_remove(i).IsInitialized()) return false;
+  }
+  return true;
+}
+
+void IULinkUpdate::Swap(IULinkUpdate* other) {
+  if (other != this) {
+    std::swap(uid_, other->uid_);
+    std::swap(revision_, other->revision_);
+    new_links_.Swap(&other->new_links_);
+    links_to_remove_.Swap(&other->links_to_remove_);
+    std::swap(is_delta_, other->is_delta_);
+    std::swap(writer_name_, other->writer_name_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata IULinkUpdate::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = IULinkUpdate_descriptor_;
+  metadata.reflection = IULinkUpdate_reflection_;
+  return metadata;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace protobuf
+}  // namespace ipaaca
+
+// @@protoc_insertion_point(global_scope)
diff --git a/ipaacalib/cpp/ipaaca.pb.h b/ipaacalib/cpp/ipaaca.pb.h
new file mode 100644
index 0000000000000000000000000000000000000000..2947a1fd5f80a33337e74e1dfe0b069256322679
--- /dev/null
+++ b/ipaacalib/cpp/ipaaca.pb.h
@@ -0,0 +1,2691 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: ipaaca.proto
+
+#ifndef PROTOBUF_ipaaca_2eproto__INCLUDED
+#define PROTOBUF_ipaaca_2eproto__INCLUDED
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 2004000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 2004001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/repeated_field.h>
+#include <google/protobuf/extension_set.h>
+#include <google/protobuf/generated_message_reflection.h>
+// @@protoc_insertion_point(includes)
+
+namespace ipaaca {
+namespace protobuf {
+
+// Internal implementation detail -- do not call these.
+void  protobuf_AddDesc_ipaaca_2eproto();
+void protobuf_AssignDesc_ipaaca_2eproto();
+void protobuf_ShutdownFile_ipaaca_2eproto();
+
+class IntMessage;
+class LinkSet;
+class PayloadItem;
+class IU;
+class IUPayloadUpdate;
+class IURetraction;
+class IUCommission;
+class IUResendRequest;
+class IULinkUpdate;
+
+enum IU_AccessMode {
+  IU_AccessMode_PUSH = 0,
+  IU_AccessMode_REMOTE = 1,
+  IU_AccessMode_MESSAGE = 2
+};
+bool IU_AccessMode_IsValid(int value);
+const IU_AccessMode IU_AccessMode_AccessMode_MIN = IU_AccessMode_PUSH;
+const IU_AccessMode IU_AccessMode_AccessMode_MAX = IU_AccessMode_MESSAGE;
+const int IU_AccessMode_AccessMode_ARRAYSIZE = IU_AccessMode_AccessMode_MAX + 1;
+
+const ::google::protobuf::EnumDescriptor* IU_AccessMode_descriptor();
+inline const ::std::string& IU_AccessMode_Name(IU_AccessMode value) {
+  return ::google::protobuf::internal::NameOfEnum(
+    IU_AccessMode_descriptor(), value);
+}
+inline bool IU_AccessMode_Parse(
+    const ::std::string& name, IU_AccessMode* value) {
+  return ::google::protobuf::internal::ParseNamedEnum<IU_AccessMode>(
+    IU_AccessMode_descriptor(), name, value);
+}
+// ===================================================================
+
+class IntMessage : public ::google::protobuf::Message {
+ public:
+  IntMessage();
+  virtual ~IntMessage();
+  
+  IntMessage(const IntMessage& from);
+  
+  inline IntMessage& operator=(const IntMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IntMessage& default_instance();
+  
+  void Swap(IntMessage* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IntMessage* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IntMessage& from);
+  void MergeFrom(const IntMessage& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required sint32 value = 1;
+  inline bool has_value() const;
+  inline void clear_value();
+  static const int kValueFieldNumber = 1;
+  inline ::google::protobuf::int32 value() const;
+  inline void set_value(::google::protobuf::int32 value);
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IntMessage)
+ private:
+  inline void set_has_value();
+  inline void clear_has_value();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::google::protobuf::int32 value_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IntMessage* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class LinkSet : public ::google::protobuf::Message {
+ public:
+  LinkSet();
+  virtual ~LinkSet();
+  
+  LinkSet(const LinkSet& from);
+  
+  inline LinkSet& operator=(const LinkSet& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const LinkSet& default_instance();
+  
+  void Swap(LinkSet* other);
+  
+  // implements Message ----------------------------------------------
+  
+  LinkSet* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const LinkSet& from);
+  void MergeFrom(const LinkSet& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string type = 1;
+  inline bool has_type() const;
+  inline void clear_type();
+  static const int kTypeFieldNumber = 1;
+  inline const ::std::string& type() const;
+  inline void set_type(const ::std::string& value);
+  inline void set_type(const char* value);
+  inline void set_type(const char* value, size_t size);
+  inline ::std::string* mutable_type();
+  inline ::std::string* release_type();
+  
+  // repeated string targets = 2;
+  inline int targets_size() const;
+  inline void clear_targets();
+  static const int kTargetsFieldNumber = 2;
+  inline const ::std::string& targets(int index) const;
+  inline ::std::string* mutable_targets(int index);
+  inline void set_targets(int index, const ::std::string& value);
+  inline void set_targets(int index, const char* value);
+  inline void set_targets(int index, const char* value, size_t size);
+  inline ::std::string* add_targets();
+  inline void add_targets(const ::std::string& value);
+  inline void add_targets(const char* value);
+  inline void add_targets(const char* value, size_t size);
+  inline const ::google::protobuf::RepeatedPtrField< ::std::string>& targets() const;
+  inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_targets();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.LinkSet)
+ private:
+  inline void set_has_type();
+  inline void clear_has_type();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* type_;
+  ::google::protobuf::RepeatedPtrField< ::std::string> targets_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static LinkSet* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class PayloadItem : public ::google::protobuf::Message {
+ public:
+  PayloadItem();
+  virtual ~PayloadItem();
+  
+  PayloadItem(const PayloadItem& from);
+  
+  inline PayloadItem& operator=(const PayloadItem& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const PayloadItem& default_instance();
+  
+  void Swap(PayloadItem* other);
+  
+  // implements Message ----------------------------------------------
+  
+  PayloadItem* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const PayloadItem& from);
+  void MergeFrom(const PayloadItem& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string key = 1;
+  inline bool has_key() const;
+  inline void clear_key();
+  static const int kKeyFieldNumber = 1;
+  inline const ::std::string& key() const;
+  inline void set_key(const ::std::string& value);
+  inline void set_key(const char* value);
+  inline void set_key(const char* value, size_t size);
+  inline ::std::string* mutable_key();
+  inline ::std::string* release_key();
+  
+  // required string value = 2;
+  inline bool has_value() const;
+  inline void clear_value();
+  static const int kValueFieldNumber = 2;
+  inline const ::std::string& value() const;
+  inline void set_value(const ::std::string& value);
+  inline void set_value(const char* value);
+  inline void set_value(const char* value, size_t size);
+  inline ::std::string* mutable_value();
+  inline ::std::string* release_value();
+  
+  // required string type = 3 [default = "str"];
+  inline bool has_type() const;
+  inline void clear_type();
+  static const int kTypeFieldNumber = 3;
+  inline const ::std::string& type() const;
+  inline void set_type(const ::std::string& value);
+  inline void set_type(const char* value);
+  inline void set_type(const char* value, size_t size);
+  inline ::std::string* mutable_type();
+  inline ::std::string* release_type();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.PayloadItem)
+ private:
+  inline void set_has_key();
+  inline void clear_has_key();
+  inline void set_has_value();
+  inline void clear_has_value();
+  inline void set_has_type();
+  inline void clear_has_type();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* key_;
+  ::std::string* value_;
+  ::std::string* type_;
+  static const ::std::string _default_type_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static PayloadItem* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class IU : public ::google::protobuf::Message {
+ public:
+  IU();
+  virtual ~IU();
+  
+  IU(const IU& from);
+  
+  inline IU& operator=(const IU& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IU& default_instance();
+  
+  void Swap(IU* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IU* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IU& from);
+  void MergeFrom(const IU& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  typedef IU_AccessMode AccessMode;
+  static const AccessMode PUSH = IU_AccessMode_PUSH;
+  static const AccessMode REMOTE = IU_AccessMode_REMOTE;
+  static const AccessMode MESSAGE = IU_AccessMode_MESSAGE;
+  static inline bool AccessMode_IsValid(int value) {
+    return IU_AccessMode_IsValid(value);
+  }
+  static const AccessMode AccessMode_MIN =
+    IU_AccessMode_AccessMode_MIN;
+  static const AccessMode AccessMode_MAX =
+    IU_AccessMode_AccessMode_MAX;
+  static const int AccessMode_ARRAYSIZE =
+    IU_AccessMode_AccessMode_ARRAYSIZE;
+  static inline const ::google::protobuf::EnumDescriptor*
+  AccessMode_descriptor() {
+    return IU_AccessMode_descriptor();
+  }
+  static inline const ::std::string& AccessMode_Name(AccessMode value) {
+    return IU_AccessMode_Name(value);
+  }
+  static inline bool AccessMode_Parse(const ::std::string& name,
+      AccessMode* value) {
+    return IU_AccessMode_Parse(name, value);
+  }
+  
+  // accessors -------------------------------------------------------
+  
+  // required string uid = 1;
+  inline bool has_uid() const;
+  inline void clear_uid();
+  static const int kUidFieldNumber = 1;
+  inline const ::std::string& uid() const;
+  inline void set_uid(const ::std::string& value);
+  inline void set_uid(const char* value);
+  inline void set_uid(const char* value, size_t size);
+  inline ::std::string* mutable_uid();
+  inline ::std::string* release_uid();
+  
+  // required uint32 revision = 2;
+  inline bool has_revision() const;
+  inline void clear_revision();
+  static const int kRevisionFieldNumber = 2;
+  inline ::google::protobuf::uint32 revision() const;
+  inline void set_revision(::google::protobuf::uint32 value);
+  
+  // required string category = 3 [default = "undef"];
+  inline bool has_category() const;
+  inline void clear_category();
+  static const int kCategoryFieldNumber = 3;
+  inline const ::std::string& category() const;
+  inline void set_category(const ::std::string& value);
+  inline void set_category(const char* value);
+  inline void set_category(const char* value, size_t size);
+  inline ::std::string* mutable_category();
+  inline ::std::string* release_category();
+  
+  // required string payload_type = 4 [default = "MAP"];
+  inline bool has_payload_type() const;
+  inline void clear_payload_type();
+  static const int kPayloadTypeFieldNumber = 4;
+  inline const ::std::string& payload_type() const;
+  inline void set_payload_type(const ::std::string& value);
+  inline void set_payload_type(const char* value);
+  inline void set_payload_type(const char* value, size_t size);
+  inline ::std::string* mutable_payload_type();
+  inline ::std::string* release_payload_type();
+  
+  // required string owner_name = 5;
+  inline bool has_owner_name() const;
+  inline void clear_owner_name();
+  static const int kOwnerNameFieldNumber = 5;
+  inline const ::std::string& owner_name() const;
+  inline void set_owner_name(const ::std::string& value);
+  inline void set_owner_name(const char* value);
+  inline void set_owner_name(const char* value, size_t size);
+  inline ::std::string* mutable_owner_name();
+  inline ::std::string* release_owner_name();
+  
+  // required bool committed = 6 [default = false];
+  inline bool has_committed() const;
+  inline void clear_committed();
+  static const int kCommittedFieldNumber = 6;
+  inline bool committed() const;
+  inline void set_committed(bool value);
+  
+  // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+  inline bool has_access_mode() const;
+  inline void clear_access_mode();
+  static const int kAccessModeFieldNumber = 7;
+  inline ::ipaaca::protobuf::IU_AccessMode access_mode() const;
+  inline void set_access_mode(::ipaaca::protobuf::IU_AccessMode value);
+  
+  // required bool read_only = 8 [default = false];
+  inline bool has_read_only() const;
+  inline void clear_read_only();
+  static const int kReadOnlyFieldNumber = 8;
+  inline bool read_only() const;
+  inline void set_read_only(bool value);
+  
+  // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+  inline int payload_size() const;
+  inline void clear_payload();
+  static const int kPayloadFieldNumber = 9;
+  inline const ::ipaaca::protobuf::PayloadItem& payload(int index) const;
+  inline ::ipaaca::protobuf::PayloadItem* mutable_payload(int index);
+  inline ::ipaaca::protobuf::PayloadItem* add_payload();
+  inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >&
+      payload() const;
+  inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >*
+      mutable_payload();
+  
+  // repeated .ipaaca.protobuf.LinkSet links = 10;
+  inline int links_size() const;
+  inline void clear_links();
+  static const int kLinksFieldNumber = 10;
+  inline const ::ipaaca::protobuf::LinkSet& links(int index) const;
+  inline ::ipaaca::protobuf::LinkSet* mutable_links(int index);
+  inline ::ipaaca::protobuf::LinkSet* add_links();
+  inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >&
+      links() const;
+  inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >*
+      mutable_links();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IU)
+ private:
+  inline void set_has_uid();
+  inline void clear_has_uid();
+  inline void set_has_revision();
+  inline void clear_has_revision();
+  inline void set_has_category();
+  inline void clear_has_category();
+  inline void set_has_payload_type();
+  inline void clear_has_payload_type();
+  inline void set_has_owner_name();
+  inline void clear_has_owner_name();
+  inline void set_has_committed();
+  inline void clear_has_committed();
+  inline void set_has_access_mode();
+  inline void clear_has_access_mode();
+  inline void set_has_read_only();
+  inline void clear_has_read_only();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* uid_;
+  ::std::string* category_;
+  static const ::std::string _default_category_;
+  ::std::string* payload_type_;
+  static const ::std::string _default_payload_type_;
+  ::google::protobuf::uint32 revision_;
+  int access_mode_;
+  ::std::string* owner_name_;
+  ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem > payload_;
+  ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet > links_;
+  bool committed_;
+  bool read_only_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(10 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IU* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class IUPayloadUpdate : public ::google::protobuf::Message {
+ public:
+  IUPayloadUpdate();
+  virtual ~IUPayloadUpdate();
+  
+  IUPayloadUpdate(const IUPayloadUpdate& from);
+  
+  inline IUPayloadUpdate& operator=(const IUPayloadUpdate& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IUPayloadUpdate& default_instance();
+  
+  void Swap(IUPayloadUpdate* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IUPayloadUpdate* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IUPayloadUpdate& from);
+  void MergeFrom(const IUPayloadUpdate& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string uid = 1;
+  inline bool has_uid() const;
+  inline void clear_uid();
+  static const int kUidFieldNumber = 1;
+  inline const ::std::string& uid() const;
+  inline void set_uid(const ::std::string& value);
+  inline void set_uid(const char* value);
+  inline void set_uid(const char* value, size_t size);
+  inline ::std::string* mutable_uid();
+  inline ::std::string* release_uid();
+  
+  // required uint32 revision = 2;
+  inline bool has_revision() const;
+  inline void clear_revision();
+  static const int kRevisionFieldNumber = 2;
+  inline ::google::protobuf::uint32 revision() const;
+  inline void set_revision(::google::protobuf::uint32 value);
+  
+  // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+  inline int new_items_size() const;
+  inline void clear_new_items();
+  static const int kNewItemsFieldNumber = 3;
+  inline const ::ipaaca::protobuf::PayloadItem& new_items(int index) const;
+  inline ::ipaaca::protobuf::PayloadItem* mutable_new_items(int index);
+  inline ::ipaaca::protobuf::PayloadItem* add_new_items();
+  inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >&
+      new_items() const;
+  inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >*
+      mutable_new_items();
+  
+  // repeated string keys_to_remove = 4;
+  inline int keys_to_remove_size() const;
+  inline void clear_keys_to_remove();
+  static const int kKeysToRemoveFieldNumber = 4;
+  inline const ::std::string& keys_to_remove(int index) const;
+  inline ::std::string* mutable_keys_to_remove(int index);
+  inline void set_keys_to_remove(int index, const ::std::string& value);
+  inline void set_keys_to_remove(int index, const char* value);
+  inline void set_keys_to_remove(int index, const char* value, size_t size);
+  inline ::std::string* add_keys_to_remove();
+  inline void add_keys_to_remove(const ::std::string& value);
+  inline void add_keys_to_remove(const char* value);
+  inline void add_keys_to_remove(const char* value, size_t size);
+  inline const ::google::protobuf::RepeatedPtrField< ::std::string>& keys_to_remove() const;
+  inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_keys_to_remove();
+  
+  // required bool is_delta = 5 [default = false];
+  inline bool has_is_delta() const;
+  inline void clear_is_delta();
+  static const int kIsDeltaFieldNumber = 5;
+  inline bool is_delta() const;
+  inline void set_is_delta(bool value);
+  
+  // required string writer_name = 6;
+  inline bool has_writer_name() const;
+  inline void clear_writer_name();
+  static const int kWriterNameFieldNumber = 6;
+  inline const ::std::string& writer_name() const;
+  inline void set_writer_name(const ::std::string& value);
+  inline void set_writer_name(const char* value);
+  inline void set_writer_name(const char* value, size_t size);
+  inline ::std::string* mutable_writer_name();
+  inline ::std::string* release_writer_name();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUPayloadUpdate)
+ private:
+  inline void set_has_uid();
+  inline void clear_has_uid();
+  inline void set_has_revision();
+  inline void clear_has_revision();
+  inline void set_has_is_delta();
+  inline void clear_has_is_delta();
+  inline void set_has_writer_name();
+  inline void clear_has_writer_name();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* uid_;
+  ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem > new_items_;
+  ::google::protobuf::uint32 revision_;
+  bool is_delta_;
+  ::google::protobuf::RepeatedPtrField< ::std::string> keys_to_remove_;
+  ::std::string* writer_name_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(6 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IUPayloadUpdate* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class IURetraction : public ::google::protobuf::Message {
+ public:
+  IURetraction();
+  virtual ~IURetraction();
+  
+  IURetraction(const IURetraction& from);
+  
+  inline IURetraction& operator=(const IURetraction& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IURetraction& default_instance();
+  
+  void Swap(IURetraction* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IURetraction* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IURetraction& from);
+  void MergeFrom(const IURetraction& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string uid = 1;
+  inline bool has_uid() const;
+  inline void clear_uid();
+  static const int kUidFieldNumber = 1;
+  inline const ::std::string& uid() const;
+  inline void set_uid(const ::std::string& value);
+  inline void set_uid(const char* value);
+  inline void set_uid(const char* value, size_t size);
+  inline ::std::string* mutable_uid();
+  inline ::std::string* release_uid();
+  
+  // required uint32 revision = 2;
+  inline bool has_revision() const;
+  inline void clear_revision();
+  static const int kRevisionFieldNumber = 2;
+  inline ::google::protobuf::uint32 revision() const;
+  inline void set_revision(::google::protobuf::uint32 value);
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IURetraction)
+ private:
+  inline void set_has_uid();
+  inline void clear_has_uid();
+  inline void set_has_revision();
+  inline void clear_has_revision();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* uid_;
+  ::google::protobuf::uint32 revision_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IURetraction* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class IUCommission : public ::google::protobuf::Message {
+ public:
+  IUCommission();
+  virtual ~IUCommission();
+  
+  IUCommission(const IUCommission& from);
+  
+  inline IUCommission& operator=(const IUCommission& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IUCommission& default_instance();
+  
+  void Swap(IUCommission* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IUCommission* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IUCommission& from);
+  void MergeFrom(const IUCommission& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string uid = 1;
+  inline bool has_uid() const;
+  inline void clear_uid();
+  static const int kUidFieldNumber = 1;
+  inline const ::std::string& uid() const;
+  inline void set_uid(const ::std::string& value);
+  inline void set_uid(const char* value);
+  inline void set_uid(const char* value, size_t size);
+  inline ::std::string* mutable_uid();
+  inline ::std::string* release_uid();
+  
+  // required uint32 revision = 2;
+  inline bool has_revision() const;
+  inline void clear_revision();
+  static const int kRevisionFieldNumber = 2;
+  inline ::google::protobuf::uint32 revision() const;
+  inline void set_revision(::google::protobuf::uint32 value);
+  
+  // required string writer_name = 3;
+  inline bool has_writer_name() const;
+  inline void clear_writer_name();
+  static const int kWriterNameFieldNumber = 3;
+  inline const ::std::string& writer_name() const;
+  inline void set_writer_name(const ::std::string& value);
+  inline void set_writer_name(const char* value);
+  inline void set_writer_name(const char* value, size_t size);
+  inline ::std::string* mutable_writer_name();
+  inline ::std::string* release_writer_name();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUCommission)
+ private:
+  inline void set_has_uid();
+  inline void clear_has_uid();
+  inline void set_has_revision();
+  inline void clear_has_revision();
+  inline void set_has_writer_name();
+  inline void clear_has_writer_name();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* uid_;
+  ::std::string* writer_name_;
+  ::google::protobuf::uint32 revision_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IUCommission* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class IUResendRequest : public ::google::protobuf::Message {
+ public:
+  IUResendRequest();
+  virtual ~IUResendRequest();
+  
+  IUResendRequest(const IUResendRequest& from);
+  
+  inline IUResendRequest& operator=(const IUResendRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IUResendRequest& default_instance();
+  
+  void Swap(IUResendRequest* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IUResendRequest* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IUResendRequest& from);
+  void MergeFrom(const IUResendRequest& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string uid = 1;
+  inline bool has_uid() const;
+  inline void clear_uid();
+  static const int kUidFieldNumber = 1;
+  inline const ::std::string& uid() const;
+  inline void set_uid(const ::std::string& value);
+  inline void set_uid(const char* value);
+  inline void set_uid(const char* value, size_t size);
+  inline ::std::string* mutable_uid();
+  inline ::std::string* release_uid();
+  
+  // required string hidden_scope_name = 2;
+  inline bool has_hidden_scope_name() const;
+  inline void clear_hidden_scope_name();
+  static const int kHiddenScopeNameFieldNumber = 2;
+  inline const ::std::string& hidden_scope_name() const;
+  inline void set_hidden_scope_name(const ::std::string& value);
+  inline void set_hidden_scope_name(const char* value);
+  inline void set_hidden_scope_name(const char* value, size_t size);
+  inline ::std::string* mutable_hidden_scope_name();
+  inline ::std::string* release_hidden_scope_name();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUResendRequest)
+ private:
+  inline void set_has_uid();
+  inline void clear_has_uid();
+  inline void set_has_hidden_scope_name();
+  inline void clear_has_hidden_scope_name();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* uid_;
+  ::std::string* hidden_scope_name_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IUResendRequest* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class IULinkUpdate : public ::google::protobuf::Message {
+ public:
+  IULinkUpdate();
+  virtual ~IULinkUpdate();
+  
+  IULinkUpdate(const IULinkUpdate& from);
+  
+  inline IULinkUpdate& operator=(const IULinkUpdate& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+  
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+  
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const IULinkUpdate& default_instance();
+  
+  void Swap(IULinkUpdate* other);
+  
+  // implements Message ----------------------------------------------
+  
+  IULinkUpdate* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const IULinkUpdate& from);
+  void MergeFrom(const IULinkUpdate& from);
+  void Clear();
+  bool IsInitialized() const;
+  
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+  
+  ::google::protobuf::Metadata GetMetadata() const;
+  
+  // nested types ----------------------------------------------------
+  
+  // accessors -------------------------------------------------------
+  
+  // required string uid = 1;
+  inline bool has_uid() const;
+  inline void clear_uid();
+  static const int kUidFieldNumber = 1;
+  inline const ::std::string& uid() const;
+  inline void set_uid(const ::std::string& value);
+  inline void set_uid(const char* value);
+  inline void set_uid(const char* value, size_t size);
+  inline ::std::string* mutable_uid();
+  inline ::std::string* release_uid();
+  
+  // required uint32 revision = 2;
+  inline bool has_revision() const;
+  inline void clear_revision();
+  static const int kRevisionFieldNumber = 2;
+  inline ::google::protobuf::uint32 revision() const;
+  inline void set_revision(::google::protobuf::uint32 value);
+  
+  // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+  inline int new_links_size() const;
+  inline void clear_new_links();
+  static const int kNewLinksFieldNumber = 3;
+  inline const ::ipaaca::protobuf::LinkSet& new_links(int index) const;
+  inline ::ipaaca::protobuf::LinkSet* mutable_new_links(int index);
+  inline ::ipaaca::protobuf::LinkSet* add_new_links();
+  inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >&
+      new_links() const;
+  inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >*
+      mutable_new_links();
+  
+  // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+  inline int links_to_remove_size() const;
+  inline void clear_links_to_remove();
+  static const int kLinksToRemoveFieldNumber = 4;
+  inline const ::ipaaca::protobuf::LinkSet& links_to_remove(int index) const;
+  inline ::ipaaca::protobuf::LinkSet* mutable_links_to_remove(int index);
+  inline ::ipaaca::protobuf::LinkSet* add_links_to_remove();
+  inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >&
+      links_to_remove() const;
+  inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >*
+      mutable_links_to_remove();
+  
+  // required bool is_delta = 5 [default = false];
+  inline bool has_is_delta() const;
+  inline void clear_is_delta();
+  static const int kIsDeltaFieldNumber = 5;
+  inline bool is_delta() const;
+  inline void set_is_delta(bool value);
+  
+  // required string writer_name = 6;
+  inline bool has_writer_name() const;
+  inline void clear_writer_name();
+  static const int kWriterNameFieldNumber = 6;
+  inline const ::std::string& writer_name() const;
+  inline void set_writer_name(const ::std::string& value);
+  inline void set_writer_name(const char* value);
+  inline void set_writer_name(const char* value, size_t size);
+  inline ::std::string* mutable_writer_name();
+  inline ::std::string* release_writer_name();
+  
+  // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IULinkUpdate)
+ private:
+  inline void set_has_uid();
+  inline void clear_has_uid();
+  inline void set_has_revision();
+  inline void clear_has_revision();
+  inline void set_has_is_delta();
+  inline void clear_has_is_delta();
+  inline void set_has_writer_name();
+  inline void clear_has_writer_name();
+  
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  
+  ::std::string* uid_;
+  ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet > new_links_;
+  ::google::protobuf::uint32 revision_;
+  bool is_delta_;
+  ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet > links_to_remove_;
+  ::std::string* writer_name_;
+  
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(6 + 31) / 32];
+  
+  friend void  protobuf_AddDesc_ipaaca_2eproto();
+  friend void protobuf_AssignDesc_ipaaca_2eproto();
+  friend void protobuf_ShutdownFile_ipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IULinkUpdate* default_instance_;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+// IntMessage
+
+// required sint32 value = 1;
+inline bool IntMessage::has_value() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IntMessage::set_has_value() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IntMessage::clear_has_value() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IntMessage::clear_value() {
+  value_ = 0;
+  clear_has_value();
+}
+inline ::google::protobuf::int32 IntMessage::value() const {
+  return value_;
+}
+inline void IntMessage::set_value(::google::protobuf::int32 value) {
+  set_has_value();
+  value_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// LinkSet
+
+// required string type = 1;
+inline bool LinkSet::has_type() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void LinkSet::set_has_type() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void LinkSet::clear_has_type() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void LinkSet::clear_type() {
+  if (type_ != &::google::protobuf::internal::kEmptyString) {
+    type_->clear();
+  }
+  clear_has_type();
+}
+inline const ::std::string& LinkSet::type() const {
+  return *type_;
+}
+inline void LinkSet::set_type(const ::std::string& value) {
+  set_has_type();
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
+    type_ = new ::std::string;
+  }
+  type_->assign(value);
+}
+inline void LinkSet::set_type(const char* value) {
+  set_has_type();
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
+    type_ = new ::std::string;
+  }
+  type_->assign(value);
+}
+inline void LinkSet::set_type(const char* value, size_t size) {
+  set_has_type();
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
+    type_ = new ::std::string;
+  }
+  type_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* LinkSet::mutable_type() {
+  set_has_type();
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
+    type_ = new ::std::string;
+  }
+  return type_;
+}
+inline ::std::string* LinkSet::release_type() {
+  clear_has_type();
+  if (type_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = type_;
+    type_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// repeated string targets = 2;
+inline int LinkSet::targets_size() const {
+  return targets_.size();
+}
+inline void LinkSet::clear_targets() {
+  targets_.Clear();
+}
+inline const ::std::string& LinkSet::targets(int index) const {
+  return targets_.Get(index);
+}
+inline ::std::string* LinkSet::mutable_targets(int index) {
+  return targets_.Mutable(index);
+}
+inline void LinkSet::set_targets(int index, const ::std::string& value) {
+  targets_.Mutable(index)->assign(value);
+}
+inline void LinkSet::set_targets(int index, const char* value) {
+  targets_.Mutable(index)->assign(value);
+}
+inline void LinkSet::set_targets(int index, const char* value, size_t size) {
+  targets_.Mutable(index)->assign(
+    reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* LinkSet::add_targets() {
+  return targets_.Add();
+}
+inline void LinkSet::add_targets(const ::std::string& value) {
+  targets_.Add()->assign(value);
+}
+inline void LinkSet::add_targets(const char* value) {
+  targets_.Add()->assign(value);
+}
+inline void LinkSet::add_targets(const char* value, size_t size) {
+  targets_.Add()->assign(reinterpret_cast<const char*>(value), size);
+}
+inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
+LinkSet::targets() const {
+  return targets_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::std::string>*
+LinkSet::mutable_targets() {
+  return &targets_;
+}
+
+// -------------------------------------------------------------------
+
+// PayloadItem
+
+// required string key = 1;
+inline bool PayloadItem::has_key() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void PayloadItem::set_has_key() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void PayloadItem::clear_has_key() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void PayloadItem::clear_key() {
+  if (key_ != &::google::protobuf::internal::kEmptyString) {
+    key_->clear();
+  }
+  clear_has_key();
+}
+inline const ::std::string& PayloadItem::key() const {
+  return *key_;
+}
+inline void PayloadItem::set_key(const ::std::string& value) {
+  set_has_key();
+  if (key_ == &::google::protobuf::internal::kEmptyString) {
+    key_ = new ::std::string;
+  }
+  key_->assign(value);
+}
+inline void PayloadItem::set_key(const char* value) {
+  set_has_key();
+  if (key_ == &::google::protobuf::internal::kEmptyString) {
+    key_ = new ::std::string;
+  }
+  key_->assign(value);
+}
+inline void PayloadItem::set_key(const char* value, size_t size) {
+  set_has_key();
+  if (key_ == &::google::protobuf::internal::kEmptyString) {
+    key_ = new ::std::string;
+  }
+  key_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* PayloadItem::mutable_key() {
+  set_has_key();
+  if (key_ == &::google::protobuf::internal::kEmptyString) {
+    key_ = new ::std::string;
+  }
+  return key_;
+}
+inline ::std::string* PayloadItem::release_key() {
+  clear_has_key();
+  if (key_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = key_;
+    key_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required string value = 2;
+inline bool PayloadItem::has_value() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void PayloadItem::set_has_value() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void PayloadItem::clear_has_value() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void PayloadItem::clear_value() {
+  if (value_ != &::google::protobuf::internal::kEmptyString) {
+    value_->clear();
+  }
+  clear_has_value();
+}
+inline const ::std::string& PayloadItem::value() const {
+  return *value_;
+}
+inline void PayloadItem::set_value(const ::std::string& value) {
+  set_has_value();
+  if (value_ == &::google::protobuf::internal::kEmptyString) {
+    value_ = new ::std::string;
+  }
+  value_->assign(value);
+}
+inline void PayloadItem::set_value(const char* value) {
+  set_has_value();
+  if (value_ == &::google::protobuf::internal::kEmptyString) {
+    value_ = new ::std::string;
+  }
+  value_->assign(value);
+}
+inline void PayloadItem::set_value(const char* value, size_t size) {
+  set_has_value();
+  if (value_ == &::google::protobuf::internal::kEmptyString) {
+    value_ = new ::std::string;
+  }
+  value_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* PayloadItem::mutable_value() {
+  set_has_value();
+  if (value_ == &::google::protobuf::internal::kEmptyString) {
+    value_ = new ::std::string;
+  }
+  return value_;
+}
+inline ::std::string* PayloadItem::release_value() {
+  clear_has_value();
+  if (value_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = value_;
+    value_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required string type = 3 [default = "str"];
+inline bool PayloadItem::has_type() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void PayloadItem::set_has_type() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void PayloadItem::clear_has_type() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void PayloadItem::clear_type() {
+  if (type_ != &_default_type_) {
+    type_->assign(_default_type_);
+  }
+  clear_has_type();
+}
+inline const ::std::string& PayloadItem::type() const {
+  return *type_;
+}
+inline void PayloadItem::set_type(const ::std::string& value) {
+  set_has_type();
+  if (type_ == &_default_type_) {
+    type_ = new ::std::string;
+  }
+  type_->assign(value);
+}
+inline void PayloadItem::set_type(const char* value) {
+  set_has_type();
+  if (type_ == &_default_type_) {
+    type_ = new ::std::string;
+  }
+  type_->assign(value);
+}
+inline void PayloadItem::set_type(const char* value, size_t size) {
+  set_has_type();
+  if (type_ == &_default_type_) {
+    type_ = new ::std::string;
+  }
+  type_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* PayloadItem::mutable_type() {
+  set_has_type();
+  if (type_ == &_default_type_) {
+    type_ = new ::std::string(_default_type_);
+  }
+  return type_;
+}
+inline ::std::string* PayloadItem::release_type() {
+  clear_has_type();
+  if (type_ == &_default_type_) {
+    return NULL;
+  } else {
+    ::std::string* temp = type_;
+    type_ = const_cast< ::std::string*>(&_default_type_);
+    return temp;
+  }
+}
+
+// -------------------------------------------------------------------
+
+// IU
+
+// required string uid = 1;
+inline bool IU::has_uid() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IU::set_has_uid() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IU::clear_has_uid() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IU::clear_uid() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    uid_->clear();
+  }
+  clear_has_uid();
+}
+inline const ::std::string& IU::uid() const {
+  return *uid_;
+}
+inline void IU::set_uid(const ::std::string& value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IU::set_uid(const char* value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IU::set_uid(const char* value, size_t size) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IU::mutable_uid() {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  return uid_;
+}
+inline ::std::string* IU::release_uid() {
+  clear_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = uid_;
+    uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required uint32 revision = 2;
+inline bool IU::has_revision() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void IU::set_has_revision() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void IU::clear_has_revision() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void IU::clear_revision() {
+  revision_ = 0u;
+  clear_has_revision();
+}
+inline ::google::protobuf::uint32 IU::revision() const {
+  return revision_;
+}
+inline void IU::set_revision(::google::protobuf::uint32 value) {
+  set_has_revision();
+  revision_ = value;
+}
+
+// required string category = 3 [default = "undef"];
+inline bool IU::has_category() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void IU::set_has_category() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void IU::clear_has_category() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void IU::clear_category() {
+  if (category_ != &_default_category_) {
+    category_->assign(_default_category_);
+  }
+  clear_has_category();
+}
+inline const ::std::string& IU::category() const {
+  return *category_;
+}
+inline void IU::set_category(const ::std::string& value) {
+  set_has_category();
+  if (category_ == &_default_category_) {
+    category_ = new ::std::string;
+  }
+  category_->assign(value);
+}
+inline void IU::set_category(const char* value) {
+  set_has_category();
+  if (category_ == &_default_category_) {
+    category_ = new ::std::string;
+  }
+  category_->assign(value);
+}
+inline void IU::set_category(const char* value, size_t size) {
+  set_has_category();
+  if (category_ == &_default_category_) {
+    category_ = new ::std::string;
+  }
+  category_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IU::mutable_category() {
+  set_has_category();
+  if (category_ == &_default_category_) {
+    category_ = new ::std::string(_default_category_);
+  }
+  return category_;
+}
+inline ::std::string* IU::release_category() {
+  clear_has_category();
+  if (category_ == &_default_category_) {
+    return NULL;
+  } else {
+    ::std::string* temp = category_;
+    category_ = const_cast< ::std::string*>(&_default_category_);
+    return temp;
+  }
+}
+
+// required string payload_type = 4 [default = "MAP"];
+inline bool IU::has_payload_type() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void IU::set_has_payload_type() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void IU::clear_has_payload_type() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void IU::clear_payload_type() {
+  if (payload_type_ != &_default_payload_type_) {
+    payload_type_->assign(_default_payload_type_);
+  }
+  clear_has_payload_type();
+}
+inline const ::std::string& IU::payload_type() const {
+  return *payload_type_;
+}
+inline void IU::set_payload_type(const ::std::string& value) {
+  set_has_payload_type();
+  if (payload_type_ == &_default_payload_type_) {
+    payload_type_ = new ::std::string;
+  }
+  payload_type_->assign(value);
+}
+inline void IU::set_payload_type(const char* value) {
+  set_has_payload_type();
+  if (payload_type_ == &_default_payload_type_) {
+    payload_type_ = new ::std::string;
+  }
+  payload_type_->assign(value);
+}
+inline void IU::set_payload_type(const char* value, size_t size) {
+  set_has_payload_type();
+  if (payload_type_ == &_default_payload_type_) {
+    payload_type_ = new ::std::string;
+  }
+  payload_type_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IU::mutable_payload_type() {
+  set_has_payload_type();
+  if (payload_type_ == &_default_payload_type_) {
+    payload_type_ = new ::std::string(_default_payload_type_);
+  }
+  return payload_type_;
+}
+inline ::std::string* IU::release_payload_type() {
+  clear_has_payload_type();
+  if (payload_type_ == &_default_payload_type_) {
+    return NULL;
+  } else {
+    ::std::string* temp = payload_type_;
+    payload_type_ = const_cast< ::std::string*>(&_default_payload_type_);
+    return temp;
+  }
+}
+
+// required string owner_name = 5;
+inline bool IU::has_owner_name() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void IU::set_has_owner_name() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void IU::clear_has_owner_name() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void IU::clear_owner_name() {
+  if (owner_name_ != &::google::protobuf::internal::kEmptyString) {
+    owner_name_->clear();
+  }
+  clear_has_owner_name();
+}
+inline const ::std::string& IU::owner_name() const {
+  return *owner_name_;
+}
+inline void IU::set_owner_name(const ::std::string& value) {
+  set_has_owner_name();
+  if (owner_name_ == &::google::protobuf::internal::kEmptyString) {
+    owner_name_ = new ::std::string;
+  }
+  owner_name_->assign(value);
+}
+inline void IU::set_owner_name(const char* value) {
+  set_has_owner_name();
+  if (owner_name_ == &::google::protobuf::internal::kEmptyString) {
+    owner_name_ = new ::std::string;
+  }
+  owner_name_->assign(value);
+}
+inline void IU::set_owner_name(const char* value, size_t size) {
+  set_has_owner_name();
+  if (owner_name_ == &::google::protobuf::internal::kEmptyString) {
+    owner_name_ = new ::std::string;
+  }
+  owner_name_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IU::mutable_owner_name() {
+  set_has_owner_name();
+  if (owner_name_ == &::google::protobuf::internal::kEmptyString) {
+    owner_name_ = new ::std::string;
+  }
+  return owner_name_;
+}
+inline ::std::string* IU::release_owner_name() {
+  clear_has_owner_name();
+  if (owner_name_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = owner_name_;
+    owner_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required bool committed = 6 [default = false];
+inline bool IU::has_committed() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void IU::set_has_committed() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void IU::clear_has_committed() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void IU::clear_committed() {
+  committed_ = false;
+  clear_has_committed();
+}
+inline bool IU::committed() const {
+  return committed_;
+}
+inline void IU::set_committed(bool value) {
+  set_has_committed();
+  committed_ = value;
+}
+
+// required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+inline bool IU::has_access_mode() const {
+  return (_has_bits_[0] & 0x00000040u) != 0;
+}
+inline void IU::set_has_access_mode() {
+  _has_bits_[0] |= 0x00000040u;
+}
+inline void IU::clear_has_access_mode() {
+  _has_bits_[0] &= ~0x00000040u;
+}
+inline void IU::clear_access_mode() {
+  access_mode_ = 0;
+  clear_has_access_mode();
+}
+inline ::ipaaca::protobuf::IU_AccessMode IU::access_mode() const {
+  return static_cast< ::ipaaca::protobuf::IU_AccessMode >(access_mode_);
+}
+inline void IU::set_access_mode(::ipaaca::protobuf::IU_AccessMode value) {
+  GOOGLE_DCHECK(::ipaaca::protobuf::IU_AccessMode_IsValid(value));
+  set_has_access_mode();
+  access_mode_ = value;
+}
+
+// required bool read_only = 8 [default = false];
+inline bool IU::has_read_only() const {
+  return (_has_bits_[0] & 0x00000080u) != 0;
+}
+inline void IU::set_has_read_only() {
+  _has_bits_[0] |= 0x00000080u;
+}
+inline void IU::clear_has_read_only() {
+  _has_bits_[0] &= ~0x00000080u;
+}
+inline void IU::clear_read_only() {
+  read_only_ = false;
+  clear_has_read_only();
+}
+inline bool IU::read_only() const {
+  return read_only_;
+}
+inline void IU::set_read_only(bool value) {
+  set_has_read_only();
+  read_only_ = value;
+}
+
+// repeated .ipaaca.protobuf.PayloadItem payload = 9;
+inline int IU::payload_size() const {
+  return payload_.size();
+}
+inline void IU::clear_payload() {
+  payload_.Clear();
+}
+inline const ::ipaaca::protobuf::PayloadItem& IU::payload(int index) const {
+  return payload_.Get(index);
+}
+inline ::ipaaca::protobuf::PayloadItem* IU::mutable_payload(int index) {
+  return payload_.Mutable(index);
+}
+inline ::ipaaca::protobuf::PayloadItem* IU::add_payload() {
+  return payload_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >&
+IU::payload() const {
+  return payload_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >*
+IU::mutable_payload() {
+  return &payload_;
+}
+
+// repeated .ipaaca.protobuf.LinkSet links = 10;
+inline int IU::links_size() const {
+  return links_.size();
+}
+inline void IU::clear_links() {
+  links_.Clear();
+}
+inline const ::ipaaca::protobuf::LinkSet& IU::links(int index) const {
+  return links_.Get(index);
+}
+inline ::ipaaca::protobuf::LinkSet* IU::mutable_links(int index) {
+  return links_.Mutable(index);
+}
+inline ::ipaaca::protobuf::LinkSet* IU::add_links() {
+  return links_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >&
+IU::links() const {
+  return links_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >*
+IU::mutable_links() {
+  return &links_;
+}
+
+// -------------------------------------------------------------------
+
+// IUPayloadUpdate
+
+// required string uid = 1;
+inline bool IUPayloadUpdate::has_uid() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IUPayloadUpdate::set_has_uid() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IUPayloadUpdate::clear_has_uid() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IUPayloadUpdate::clear_uid() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    uid_->clear();
+  }
+  clear_has_uid();
+}
+inline const ::std::string& IUPayloadUpdate::uid() const {
+  return *uid_;
+}
+inline void IUPayloadUpdate::set_uid(const ::std::string& value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IUPayloadUpdate::set_uid(const char* value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IUPayloadUpdate::set_uid(const char* value, size_t size) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUPayloadUpdate::mutable_uid() {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  return uid_;
+}
+inline ::std::string* IUPayloadUpdate::release_uid() {
+  clear_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = uid_;
+    uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required uint32 revision = 2;
+inline bool IUPayloadUpdate::has_revision() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void IUPayloadUpdate::set_has_revision() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void IUPayloadUpdate::clear_has_revision() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void IUPayloadUpdate::clear_revision() {
+  revision_ = 0u;
+  clear_has_revision();
+}
+inline ::google::protobuf::uint32 IUPayloadUpdate::revision() const {
+  return revision_;
+}
+inline void IUPayloadUpdate::set_revision(::google::protobuf::uint32 value) {
+  set_has_revision();
+  revision_ = value;
+}
+
+// repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+inline int IUPayloadUpdate::new_items_size() const {
+  return new_items_.size();
+}
+inline void IUPayloadUpdate::clear_new_items() {
+  new_items_.Clear();
+}
+inline const ::ipaaca::protobuf::PayloadItem& IUPayloadUpdate::new_items(int index) const {
+  return new_items_.Get(index);
+}
+inline ::ipaaca::protobuf::PayloadItem* IUPayloadUpdate::mutable_new_items(int index) {
+  return new_items_.Mutable(index);
+}
+inline ::ipaaca::protobuf::PayloadItem* IUPayloadUpdate::add_new_items() {
+  return new_items_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >&
+IUPayloadUpdate::new_items() const {
+  return new_items_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::PayloadItem >*
+IUPayloadUpdate::mutable_new_items() {
+  return &new_items_;
+}
+
+// repeated string keys_to_remove = 4;
+inline int IUPayloadUpdate::keys_to_remove_size() const {
+  return keys_to_remove_.size();
+}
+inline void IUPayloadUpdate::clear_keys_to_remove() {
+  keys_to_remove_.Clear();
+}
+inline const ::std::string& IUPayloadUpdate::keys_to_remove(int index) const {
+  return keys_to_remove_.Get(index);
+}
+inline ::std::string* IUPayloadUpdate::mutable_keys_to_remove(int index) {
+  return keys_to_remove_.Mutable(index);
+}
+inline void IUPayloadUpdate::set_keys_to_remove(int index, const ::std::string& value) {
+  keys_to_remove_.Mutable(index)->assign(value);
+}
+inline void IUPayloadUpdate::set_keys_to_remove(int index, const char* value) {
+  keys_to_remove_.Mutable(index)->assign(value);
+}
+inline void IUPayloadUpdate::set_keys_to_remove(int index, const char* value, size_t size) {
+  keys_to_remove_.Mutable(index)->assign(
+    reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUPayloadUpdate::add_keys_to_remove() {
+  return keys_to_remove_.Add();
+}
+inline void IUPayloadUpdate::add_keys_to_remove(const ::std::string& value) {
+  keys_to_remove_.Add()->assign(value);
+}
+inline void IUPayloadUpdate::add_keys_to_remove(const char* value) {
+  keys_to_remove_.Add()->assign(value);
+}
+inline void IUPayloadUpdate::add_keys_to_remove(const char* value, size_t size) {
+  keys_to_remove_.Add()->assign(reinterpret_cast<const char*>(value), size);
+}
+inline const ::google::protobuf::RepeatedPtrField< ::std::string>&
+IUPayloadUpdate::keys_to_remove() const {
+  return keys_to_remove_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::std::string>*
+IUPayloadUpdate::mutable_keys_to_remove() {
+  return &keys_to_remove_;
+}
+
+// required bool is_delta = 5 [default = false];
+inline bool IUPayloadUpdate::has_is_delta() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void IUPayloadUpdate::set_has_is_delta() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void IUPayloadUpdate::clear_has_is_delta() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void IUPayloadUpdate::clear_is_delta() {
+  is_delta_ = false;
+  clear_has_is_delta();
+}
+inline bool IUPayloadUpdate::is_delta() const {
+  return is_delta_;
+}
+inline void IUPayloadUpdate::set_is_delta(bool value) {
+  set_has_is_delta();
+  is_delta_ = value;
+}
+
+// required string writer_name = 6;
+inline bool IUPayloadUpdate::has_writer_name() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void IUPayloadUpdate::set_has_writer_name() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void IUPayloadUpdate::clear_has_writer_name() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void IUPayloadUpdate::clear_writer_name() {
+  if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+    writer_name_->clear();
+  }
+  clear_has_writer_name();
+}
+inline const ::std::string& IUPayloadUpdate::writer_name() const {
+  return *writer_name_;
+}
+inline void IUPayloadUpdate::set_writer_name(const ::std::string& value) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(value);
+}
+inline void IUPayloadUpdate::set_writer_name(const char* value) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(value);
+}
+inline void IUPayloadUpdate::set_writer_name(const char* value, size_t size) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUPayloadUpdate::mutable_writer_name() {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  return writer_name_;
+}
+inline ::std::string* IUPayloadUpdate::release_writer_name() {
+  clear_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = writer_name_;
+    writer_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// -------------------------------------------------------------------
+
+// IURetraction
+
+// required string uid = 1;
+inline bool IURetraction::has_uid() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IURetraction::set_has_uid() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IURetraction::clear_has_uid() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IURetraction::clear_uid() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    uid_->clear();
+  }
+  clear_has_uid();
+}
+inline const ::std::string& IURetraction::uid() const {
+  return *uid_;
+}
+inline void IURetraction::set_uid(const ::std::string& value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IURetraction::set_uid(const char* value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IURetraction::set_uid(const char* value, size_t size) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IURetraction::mutable_uid() {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  return uid_;
+}
+inline ::std::string* IURetraction::release_uid() {
+  clear_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = uid_;
+    uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required uint32 revision = 2;
+inline bool IURetraction::has_revision() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void IURetraction::set_has_revision() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void IURetraction::clear_has_revision() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void IURetraction::clear_revision() {
+  revision_ = 0u;
+  clear_has_revision();
+}
+inline ::google::protobuf::uint32 IURetraction::revision() const {
+  return revision_;
+}
+inline void IURetraction::set_revision(::google::protobuf::uint32 value) {
+  set_has_revision();
+  revision_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// IUCommission
+
+// required string uid = 1;
+inline bool IUCommission::has_uid() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IUCommission::set_has_uid() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IUCommission::clear_has_uid() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IUCommission::clear_uid() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    uid_->clear();
+  }
+  clear_has_uid();
+}
+inline const ::std::string& IUCommission::uid() const {
+  return *uid_;
+}
+inline void IUCommission::set_uid(const ::std::string& value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IUCommission::set_uid(const char* value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IUCommission::set_uid(const char* value, size_t size) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUCommission::mutable_uid() {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  return uid_;
+}
+inline ::std::string* IUCommission::release_uid() {
+  clear_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = uid_;
+    uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required uint32 revision = 2;
+inline bool IUCommission::has_revision() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void IUCommission::set_has_revision() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void IUCommission::clear_has_revision() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void IUCommission::clear_revision() {
+  revision_ = 0u;
+  clear_has_revision();
+}
+inline ::google::protobuf::uint32 IUCommission::revision() const {
+  return revision_;
+}
+inline void IUCommission::set_revision(::google::protobuf::uint32 value) {
+  set_has_revision();
+  revision_ = value;
+}
+
+// required string writer_name = 3;
+inline bool IUCommission::has_writer_name() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void IUCommission::set_has_writer_name() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void IUCommission::clear_has_writer_name() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void IUCommission::clear_writer_name() {
+  if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+    writer_name_->clear();
+  }
+  clear_has_writer_name();
+}
+inline const ::std::string& IUCommission::writer_name() const {
+  return *writer_name_;
+}
+inline void IUCommission::set_writer_name(const ::std::string& value) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(value);
+}
+inline void IUCommission::set_writer_name(const char* value) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(value);
+}
+inline void IUCommission::set_writer_name(const char* value, size_t size) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUCommission::mutable_writer_name() {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  return writer_name_;
+}
+inline ::std::string* IUCommission::release_writer_name() {
+  clear_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = writer_name_;
+    writer_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// -------------------------------------------------------------------
+
+// IUResendRequest
+
+// required string uid = 1;
+inline bool IUResendRequest::has_uid() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IUResendRequest::set_has_uid() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IUResendRequest::clear_has_uid() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IUResendRequest::clear_uid() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    uid_->clear();
+  }
+  clear_has_uid();
+}
+inline const ::std::string& IUResendRequest::uid() const {
+  return *uid_;
+}
+inline void IUResendRequest::set_uid(const ::std::string& value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IUResendRequest::set_uid(const char* value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IUResendRequest::set_uid(const char* value, size_t size) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUResendRequest::mutable_uid() {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  return uid_;
+}
+inline ::std::string* IUResendRequest::release_uid() {
+  clear_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = uid_;
+    uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required string hidden_scope_name = 2;
+inline bool IUResendRequest::has_hidden_scope_name() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void IUResendRequest::set_has_hidden_scope_name() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void IUResendRequest::clear_has_hidden_scope_name() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void IUResendRequest::clear_hidden_scope_name() {
+  if (hidden_scope_name_ != &::google::protobuf::internal::kEmptyString) {
+    hidden_scope_name_->clear();
+  }
+  clear_has_hidden_scope_name();
+}
+inline const ::std::string& IUResendRequest::hidden_scope_name() const {
+  return *hidden_scope_name_;
+}
+inline void IUResendRequest::set_hidden_scope_name(const ::std::string& value) {
+  set_has_hidden_scope_name();
+  if (hidden_scope_name_ == &::google::protobuf::internal::kEmptyString) {
+    hidden_scope_name_ = new ::std::string;
+  }
+  hidden_scope_name_->assign(value);
+}
+inline void IUResendRequest::set_hidden_scope_name(const char* value) {
+  set_has_hidden_scope_name();
+  if (hidden_scope_name_ == &::google::protobuf::internal::kEmptyString) {
+    hidden_scope_name_ = new ::std::string;
+  }
+  hidden_scope_name_->assign(value);
+}
+inline void IUResendRequest::set_hidden_scope_name(const char* value, size_t size) {
+  set_has_hidden_scope_name();
+  if (hidden_scope_name_ == &::google::protobuf::internal::kEmptyString) {
+    hidden_scope_name_ = new ::std::string;
+  }
+  hidden_scope_name_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IUResendRequest::mutable_hidden_scope_name() {
+  set_has_hidden_scope_name();
+  if (hidden_scope_name_ == &::google::protobuf::internal::kEmptyString) {
+    hidden_scope_name_ = new ::std::string;
+  }
+  return hidden_scope_name_;
+}
+inline ::std::string* IUResendRequest::release_hidden_scope_name() {
+  clear_has_hidden_scope_name();
+  if (hidden_scope_name_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = hidden_scope_name_;
+    hidden_scope_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// -------------------------------------------------------------------
+
+// IULinkUpdate
+
+// required string uid = 1;
+inline bool IULinkUpdate::has_uid() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void IULinkUpdate::set_has_uid() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void IULinkUpdate::clear_has_uid() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void IULinkUpdate::clear_uid() {
+  if (uid_ != &::google::protobuf::internal::kEmptyString) {
+    uid_->clear();
+  }
+  clear_has_uid();
+}
+inline const ::std::string& IULinkUpdate::uid() const {
+  return *uid_;
+}
+inline void IULinkUpdate::set_uid(const ::std::string& value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IULinkUpdate::set_uid(const char* value) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(value);
+}
+inline void IULinkUpdate::set_uid(const char* value, size_t size) {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  uid_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IULinkUpdate::mutable_uid() {
+  set_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    uid_ = new ::std::string;
+  }
+  return uid_;
+}
+inline ::std::string* IULinkUpdate::release_uid() {
+  clear_has_uid();
+  if (uid_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = uid_;
+    uid_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+// required uint32 revision = 2;
+inline bool IULinkUpdate::has_revision() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void IULinkUpdate::set_has_revision() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void IULinkUpdate::clear_has_revision() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void IULinkUpdate::clear_revision() {
+  revision_ = 0u;
+  clear_has_revision();
+}
+inline ::google::protobuf::uint32 IULinkUpdate::revision() const {
+  return revision_;
+}
+inline void IULinkUpdate::set_revision(::google::protobuf::uint32 value) {
+  set_has_revision();
+  revision_ = value;
+}
+
+// repeated .ipaaca.protobuf.LinkSet new_links = 3;
+inline int IULinkUpdate::new_links_size() const {
+  return new_links_.size();
+}
+inline void IULinkUpdate::clear_new_links() {
+  new_links_.Clear();
+}
+inline const ::ipaaca::protobuf::LinkSet& IULinkUpdate::new_links(int index) const {
+  return new_links_.Get(index);
+}
+inline ::ipaaca::protobuf::LinkSet* IULinkUpdate::mutable_new_links(int index) {
+  return new_links_.Mutable(index);
+}
+inline ::ipaaca::protobuf::LinkSet* IULinkUpdate::add_new_links() {
+  return new_links_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >&
+IULinkUpdate::new_links() const {
+  return new_links_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >*
+IULinkUpdate::mutable_new_links() {
+  return &new_links_;
+}
+
+// repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+inline int IULinkUpdate::links_to_remove_size() const {
+  return links_to_remove_.size();
+}
+inline void IULinkUpdate::clear_links_to_remove() {
+  links_to_remove_.Clear();
+}
+inline const ::ipaaca::protobuf::LinkSet& IULinkUpdate::links_to_remove(int index) const {
+  return links_to_remove_.Get(index);
+}
+inline ::ipaaca::protobuf::LinkSet* IULinkUpdate::mutable_links_to_remove(int index) {
+  return links_to_remove_.Mutable(index);
+}
+inline ::ipaaca::protobuf::LinkSet* IULinkUpdate::add_links_to_remove() {
+  return links_to_remove_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >&
+IULinkUpdate::links_to_remove() const {
+  return links_to_remove_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::ipaaca::protobuf::LinkSet >*
+IULinkUpdate::mutable_links_to_remove() {
+  return &links_to_remove_;
+}
+
+// required bool is_delta = 5 [default = false];
+inline bool IULinkUpdate::has_is_delta() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void IULinkUpdate::set_has_is_delta() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void IULinkUpdate::clear_has_is_delta() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void IULinkUpdate::clear_is_delta() {
+  is_delta_ = false;
+  clear_has_is_delta();
+}
+inline bool IULinkUpdate::is_delta() const {
+  return is_delta_;
+}
+inline void IULinkUpdate::set_is_delta(bool value) {
+  set_has_is_delta();
+  is_delta_ = value;
+}
+
+// required string writer_name = 6;
+inline bool IULinkUpdate::has_writer_name() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void IULinkUpdate::set_has_writer_name() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void IULinkUpdate::clear_has_writer_name() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void IULinkUpdate::clear_writer_name() {
+  if (writer_name_ != &::google::protobuf::internal::kEmptyString) {
+    writer_name_->clear();
+  }
+  clear_has_writer_name();
+}
+inline const ::std::string& IULinkUpdate::writer_name() const {
+  return *writer_name_;
+}
+inline void IULinkUpdate::set_writer_name(const ::std::string& value) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(value);
+}
+inline void IULinkUpdate::set_writer_name(const char* value) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(value);
+}
+inline void IULinkUpdate::set_writer_name(const char* value, size_t size) {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  writer_name_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* IULinkUpdate::mutable_writer_name() {
+  set_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    writer_name_ = new ::std::string;
+  }
+  return writer_name_;
+}
+inline ::std::string* IULinkUpdate::release_writer_name() {
+  clear_has_writer_name();
+  if (writer_name_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = writer_name_;
+    writer_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace protobuf
+}  // namespace ipaaca
+
+#ifndef SWIG
+namespace google {
+namespace protobuf {
+
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::ipaaca::protobuf::IU_AccessMode>() {
+  return ::ipaaca::protobuf::IU_AccessMode_descriptor();
+}
+
+}  // namespace google
+}  // namespace protobuf
+#endif  // SWIG
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_ipaaca_2eproto__INCLUDED
diff --git a/ipaacalib/cpp/src/Makefile b/ipaacalib/cpp/src/Makefile
index 45ba15946eff401b5ad8cbfae12a09f78153baa0..3c600c2d1c74bae792c20009636c5df381e95094 100644
--- a/ipaacalib/cpp/src/Makefile
+++ b/ipaacalib/cpp/src/Makefile
@@ -5,22 +5,24 @@ else
 endif
 
 CONFIG = -DIPAACA_DEBUG_MESSAGES
-IPAACASOURCES = ipaaca.cc ipaaca.pb.cc
+#IPAACASOURCES = ipaaca.cc ../build/ipaaca/ipaaca.pb.cc
+IPAACASOURCES = ../build/ipaaca/ipaaca.pb.cc
 SOURCES = ${IPAACASOURCES} ipaaca-test-main.cc
 TEXTSOURCES = ${IPAACASOURCES} textsender.cc
-CCFLAGS=-I. -I/usr/local/include -I/opt/local/include ${CONFIG}
+CCFLAGS=-I../include -I../build -I/usr/local/include -I/opt/local/include ${CONFIG}
 LIBFLAGS=-fPIC -shared
 BOOSTLIBS = -L/opt/local/lib -lboost_regex-mt -lboost_date_time-mt -lboost_program_options-mt -lboost_thread-mt -lboost_filesystem-mt -lboost_signals-mt -lboost_system-mt
 PROTOLIBS = -L/opt/local/lib -lprotobuf
-LIBS = ${BOOSTLIBS} ${PROTOLIBS} -L/usr/local/lib -lrsc -lrsbcore
+#LIBS = ${BOOSTLIBS} ${PROTOLIBS} -L/usr/local/lib -lrsc -lrsbcore
+LIBS = ${BOOSTLIBS} ${PROTOLIBS} -L/usr/local/lib -L../build -lipaaca
 
-COMPILER = gfilt
+COMPILER = gcc#gfilt
 
 all: lib
 	
 
-lib:
-	${COMPILER} ${CCFLAGS} ${IPAACASOURCES} ${LIBS} ${LIBFLAGS} -o libipaaca${LIB_SUFFIX}
+#lib:
+#	${COMPILER} ${CCFLAGS} ${IPAACASOURCES} ${LIBS} ${LIBFLAGS} -o libipaaca${LIB_SUFFIX}
 
 receiver:
 	${COMPILER} ${CCFLAGS} -DMAKE_RECEIVER -o ipaaca-receiver ${SOURCES} ${LIBS}
@@ -28,13 +30,13 @@ receiver:
 sender:
 	${COMPILER} ${CCFLAGS} -DMAKE_SENDER -o ipaaca-sender ${SOURCES} ${LIBS}
 
-main:
-	${COMPILER} ${CCFLAGS} -o ipaaca-main ${SOURCES} ${LIBS}
+#main:
+#	${COMPILER} ${CCFLAGS} -o ipaaca-main ${SOURCES} ${LIBS}
 
-protoc:
-	protoc --proto_path=../../proto ../../proto/ipaaca.proto --cpp_out=.
+#protoc:
+#	protoc --proto_path=../../proto ../../proto/ipaaca.proto --cpp_out=.
 
-clean:
-	rm -f libipaaca${LIB_SUFFIX} ipaaca-main ipaaca-sender ipaaca-receiver ipaaca.pb.h ipaaca.pb.cc
+#clean:
+#	rm -f libipaaca${LIB_SUFFIX} ipaaca-main ipaaca-sender ipaaca-receiver ipaaca.pb.h ipaaca.pb.cc
 
 
diff --git a/ipaacalib/cpp/src/Makefile~ b/ipaacalib/cpp/src/Makefile~
new file mode 100644
index 0000000000000000000000000000000000000000..2397a214dbbc64326f6a22337322edc6fa4176dd
--- /dev/null
+++ b/ipaacalib/cpp/src/Makefile~
@@ -0,0 +1,41 @@
+ifeq ($(WBS_ARCH),mac)
+	LIB_SUFFIX=.dylib
+else
+	LIB_SUFFIX=.so
+endif
+
+CONFIG = -DIPAACA_DEBUG_MESSAGES
+#IPAACASOURCES = ipaaca.cc ../build/ipaaca/ipaaca.pb.cc
+IPAACASOURCES = ../build/ipaaca/ipaaca.pb.cc
+SOURCES = ${IPAACASOURCES} ipaaca-test-main.cc
+TEXTSOURCES = ${IPAACASOURCES} textsender.cc
+CCFLAGS=-I../include -I../build -I/usr/local/include -I/opt/local/include ${CONFIG}
+LIBFLAGS=-fPIC -shared
+BOOSTLIBS = -L/opt/local/lib -lboost_regex-mt -lboost_date_time-mt -lboost_program_options-mt -lboost_thread-mt -lboost_filesystem-mt -lboost_signals-mt -lboost_system-mt
+PROTOLIBS = -L/opt/local/lib -lprotobuf
+LIBS = ${BOOSTLIBS} ${PROTOLIBS} -L/usr/local/lib -L../build -lrsc -lrsbcore -lipaaca
+
+COMPILER = gcc#gfilt
+
+all: lib
+	
+
+#lib:
+#	${COMPILER} ${CCFLAGS} ${IPAACASOURCES} ${LIBS} ${LIBFLAGS} -o libipaaca${LIB_SUFFIX}
+
+receiver:
+	${COMPILER} ${CCFLAGS} -DMAKE_RECEIVER -o ipaaca-receiver ${SOURCES} ${LIBS}
+
+sender:
+	${COMPILER} ${CCFLAGS} -DMAKE_SENDER -o ipaaca-sender ${SOURCES} ${LIBS}
+
+#main:
+#	${COMPILER} ${CCFLAGS} -o ipaaca-main ${SOURCES} ${LIBS}
+
+#protoc:
+#	protoc --proto_path=../../proto ../../proto/ipaaca.proto --cpp_out=.
+
+#clean:
+#	rm -f libipaaca${LIB_SUFFIX} ipaaca-main ipaaca-sender ipaaca-receiver ipaaca.pb.h ipaaca.pb.cc
+
+
diff --git a/ipaacalib/cpp/src/ipaaca-receiver b/ipaacalib/cpp/src/ipaaca-receiver
new file mode 100755
index 0000000000000000000000000000000000000000..c1e75327b14a2892996d2b2baf8b7c395fda1e87
Binary files /dev/null and b/ipaacalib/cpp/src/ipaaca-receiver differ
diff --git a/ipaacalib/cpp/src/ipaaca-sender b/ipaacalib/cpp/src/ipaaca-sender
new file mode 100755
index 0000000000000000000000000000000000000000..264a94e3eeba896dd39f4a52f0fb1bf24f6a815b
Binary files /dev/null and b/ipaacalib/cpp/src/ipaaca-sender differ
diff --git a/ipaacalib/cpp/src/ipaaca-test-main.cc b/ipaacalib/cpp/src/ipaaca-test-main.cc
index b6ce132704a81a95ccbe1aba63293ef31bde00f7..46946dbd8698df57e565cd8dec654e0de8e7cb36 100644
--- a/ipaacalib/cpp/src/ipaaca-test-main.cc
+++ b/ipaacalib/cpp/src/ipaaca-test-main.cc
@@ -30,7 +30,7 @@
  * Excellence Initiative.
  */
 
-#include <ipaaca.h>
+#include <../include/ipaaca/ipaaca.h>
 #include <typeinfo>
 
 //#include <rsc/logging/Logger.h>
@@ -56,7 +56,7 @@ int main() {
 	try{
 		//initialize_ipaaca_rsb();
 		
-		InputBuffer::ptr ib = InputBuffer::create("Tester", "testcategory");
+		InputBuffer::ptr ib = InputBuffer::create("Tester", "spam");
 		ib->register_handler(my_first_iu_handler);
 		
 		while (true) {
@@ -82,7 +82,7 @@ int main() {
 		ob->register_handler(iu_handler_for_remote_changes);
 		//std::cout << "Buffer: " << ob->unique_name() << std::endl;
 		
-		IU::ptr iu = IU::create("testcategory");
+		IU::ptr iu = IU::create("spam");
 		ob->add(iu);
 		
 		std::cout << "Updating in 1 sec" << std::endl;
@@ -98,11 +98,20 @@ int main() {
 		
 		iu->add_link("grin", "DUMMY_IU_UID_1234efef1234");
 		
-		std::cout << "Interpreted as  long  value: " << iu->_payload["TEST"].to_int() << std::endl;
-		std::cout << "Interpreted as double value: " << iu->_payload["TEST"].to_float() << std::endl;
+		//std::cout << "Interpreted as  long  value: " << iu->_payload["TEST"].to_int() << std::endl;
+		//std::cout << "Interpreted as double value: " << iu->_payload["TEST"].to_float() << std::endl;
 		
 		std::cout << "Committing and quitting in 1 sec" << std::endl;
 		sleep(1);
+		int c = 0;
+		while(true) {
+			std::stringstream ss;
+			ss << c;
+                        iu->_payload["data"] = ss.str();
+			std::cout << "iu->_payload[\"data\"]=" << ss.str() << std::endl;
+			c++;
+			sleep(1);
+		}
 		iu->commit();
 	} catch (ipaaca::Exception& e) {
 		std::cout << "== IPAACA EXCEPTION == " << e.what() << std::endl;
diff --git a/ipaacalib/cpp/src/ipaaca.cc b/ipaacalib/cpp/src/ipaaca.cc
index d96f5e9d6fdc7d7da8b38246028f418cd4cd0685..4001e1c4a4e975774321868e6c0f1deb6dcfecbe 100644
--- a/ipaacalib/cpp/src/ipaaca.cc
+++ b/ipaacalib/cpp/src/ipaaca.cc
@@ -385,17 +385,20 @@ IPAACA_EXPORT void Buffer::_allocate_unique_name(const std::string& basename, co
 }
 IPAACA_EXPORT void Buffer::register_handler(IUEventHandlerFunction function, IUEventType event_mask, const std::set<std::string>& categories)
 {
+	std::cout << "register_handler " << function << " " << event_mask << " " << categories << std::endl;
 	IUEventHandler::ptr handler = IUEventHandler::ptr(new IUEventHandler(function, event_mask, categories));
 	_event_handlers.push_back(handler);
 }
 IPAACA_EXPORT void Buffer::register_handler(IUEventHandlerFunction function, IUEventType event_mask, const std::string& category)
 {
+	std::cout << "register_handler " << function << " " << event_mask << " " << category << std::endl;
 	IUEventHandler::ptr handler = IUEventHandler::ptr(new IUEventHandler(function, event_mask, category));
 	_event_handlers.push_back(handler);
 }
 IPAACA_EXPORT void Buffer::call_iu_event_handlers(boost::shared_ptr<IUInterface> iu, bool local, IUEventType event_type, const std::string& category)
 {
-	//IPAACA_INFO("handling an event " << ipaaca::iu_event_type_to_str(event_type) << " for IU " << iu->uid())
+	IPAACA_INFO("handling an event " << ipaaca::iu_event_type_to_str(event_type) << " for IU " << iu->uid())
+	std::cout << "handling an event " << ipaaca::iu_event_type_to_str(event_type) << " for IU " << iu->uid() << std::endl;
 	for (std::vector<IUEventHandler::ptr>::iterator it = _event_handlers.begin(); it != _event_handlers.end(); ++it) {
 		(*it)->call(this, iu, local, event_type, category);
 	}
@@ -503,10 +506,15 @@ IPAACA_EXPORT boost::shared_ptr<int> CallbackIUResendRequest::call(const std::st
 		//Informer<AnyType>::Ptr informer = _buffer->_get_informer(update->hidden_scope_name());
 		//Informer<ipaaca::IU>::DataPtr iu_data(iu);
 		//informer->publish(iu_data);
-		//_buffer->call_iu_event_handlers(iu, true, IU_ŔESENDREQUEST, update->getHiddenScopeName());
+		//_buffer->call_iu_event_handlers(iu, true, IU_RESENDREQUEST, update->getHiddenScopeName());
 		//_buffer->_publish_resend_update(iui, update->hidden_scope_name());
-		_buffer->call_iu_event_handlers(iu, true, IU_UPDATED, update->hidden_scope_name());
+
+		std::cout << "dlw call_iu_event_handlers " << update->hidden_scope_name() << std::endl;
+		//_buffer->call_iu_event_handlers(iu, true, IU_UPDATED, update->hidden_scope_name());
 		revision_t revision = iu->revision();
+
+		iu->_publish_resend(iu, update->hidden_scope_name());
+
 		return boost::shared_ptr<int>(new int(revision));
 	} else {
 		revision_t revision = 0;
@@ -600,6 +608,11 @@ IPAACA_EXPORT void OutputBuffer::_send_iu_commission(IUInterface* iu, revision_t
 	informer->publish(data);
 }
 
+
+
+
+
+
 IPAACA_EXPORT void OutputBuffer::add(IU::ptr iu)
 {
 	if (_iu_store.count(iu->uid()) > 0) {
@@ -623,12 +636,22 @@ IPAACA_EXPORT void OutputBuffer::_publish_iu(IU::ptr iu)
 	informer->publish(iu_data);
 }
 
+IPAACA_EXPORT void OutputBuffer::_publish_iu_resend(IU::ptr iu, const std::string& hidden_scope_name)
+{
+	Informer<AnyType>::Ptr informer = _get_informer(hidden_scope_name);
+	Informer<ipaaca::IU>::DataPtr iu_data(iu);
+	informer->publish(iu_data);
+}
+
+
+
+
 IPAACA_EXPORT Informer<AnyType>::Ptr OutputBuffer::_get_informer(const std::string& category)
 {
 	if (_informer_store.count(category) > 0) {
 		return _informer_store[category];
 	} else {
-		//IPAACA_INFO("Making new informer for category " << category)
+		IPAACA_INFO("Making new informer for category " << category)
 		std::string scope_string = "/ipaaca/category/" + category;
 		Informer<AnyType>::Ptr informer = getFactory().createInformer<AnyType> ( Scope(scope_string));
 		_informer_store[category] = informer;
@@ -769,16 +792,17 @@ IPAACA_EXPORT RemoteServerPtr InputBuffer::_get_remote_server(const std::string&
 
 IPAACA_EXPORT ListenerPtr InputBuffer::_create_category_listener_if_needed(const std::string& category)
 {
-	//IPAACA_INFO("Entering ...")
+	IPAACA_INFO("Entering ...")
 	std::map<std::string, ListenerPtr>::iterator it = _listener_store.find(category);
 	if (it!=_listener_store.end()) {
-		//IPAACA_INFO("... exiting.")
+		IPAACA_INFO("... exiting.")
 		return it->second;
 	}
-	//IPAACA_INFO("Creating a new listener for category " << category)
+	IPAACA_INFO("Creating a new listener for category " << category)
+	std::cout << "Creating a new listener for category " << category << std::endl;
 	std::string scope_string = "/ipaaca/category/" + category;
 	ListenerPtr listener = getFactory().createListener( Scope(scope_string) );
-	//IPAACA_INFO("Adding handler")
+	IPAACA_INFO("Adding handler")
 	HandlerPtr event_handler = HandlerPtr(
 			new EventFunctionHandler(
 				boost::bind(&InputBuffer::_handle_iu_events, this, _1)
@@ -786,31 +810,38 @@ IPAACA_EXPORT ListenerPtr InputBuffer::_create_category_listener_if_needed(const
 		);
 	listener->addHandler(event_handler);
 	_listener_store[category] = listener;
-	//IPAACA_INFO("... exiting.")
+	IPAACA_INFO("... exiting.")
 	return listener;
 }
 IPAACA_EXPORT void InputBuffer::_trigger_resend_request(EventPtr event) {
 	std::string type = event->getType();
-	std::string uid = NULL;
-	std::string writerName = NULL;
+	std::string uid = "";
+	std::string writerName = "";
 	if (type == "ipaaca::IUPayloadUpdate") {
+		std::cout << "trigger ipaaca::IUPayloadUpdate" << std::endl;
 		boost::shared_ptr<IUPayloadUpdate> update = boost::static_pointer_cast<IUPayloadUpdate>(event->getData());
 		uid = update->uid;
 		writerName = update->writer_name;
 	} else if (type == "ipaaca::IULinkUpdate") {
+		std::cout << "trigger ipaaca::IULinkUpdate" << std::endl;
 		boost::shared_ptr<IULinkUpdate> update = boost::static_pointer_cast<IULinkUpdate>(event->getData());
 		uid = update->uid;
 		writerName = update->writer_name;
 	} else if (type == "ipaaca::protobuf::IUCommission") {
+		std::cout << "trigger ipaaca::protobuf::IUCommission" << std::endl;
 		boost::shared_ptr<protobuf::IUCommission> update = boost::static_pointer_cast<protobuf::IUCommission>(event->getData());
 		uid = update->uid();
 		writerName = update->writer_name();
+	} else {
+		std::cout << "trigger ??? else" << std::endl;
 	}
 
 	if (!writerName.empty()) {
+		std::cout << "writer name not empty " << writerName << std::endl;
 		//RemoteServerPtr server = boost::static_pointer_cast<InputBuffer>(_buffer)->_get_remote_server(_owner_name);
 		RemoteServerPtr server = _get_remote_server(writerName);
 		if (!uid.empty()) {
+			std::cout << "uid not empty " << uid << std::endl;
 			boost::shared_ptr<protobuf::IUResendRequest> update = boost::shared_ptr<protobuf::IUResendRequest>(new protobuf::IUResendRequest());
 			update->set_uid(uid);
 			update->set_hidden_scope_name(_uuid);
@@ -818,15 +849,17 @@ IPAACA_EXPORT void InputBuffer::_trigger_resend_request(EventPtr event) {
 			if (*result == 0) {
 				throw IUResendRequestFailedError();
 			} else {
-				//revision = *result; //TODO return dlw TODO
+				std::cout << "revision " << *result << std::endl; //TODO return dlw TODO
 			}
 		}
 	}
 }
 IPAACA_EXPORT void InputBuffer::_handle_iu_events(EventPtr event)
 {
+	std::cout << "handle iu events" << std::endl;
 	std::string type = event->getType();
 	if (type == "ipaaca::RemotePushIU") {
+		std::cout << "ipaaca::RemotePushIU" << std::endl;
 		boost::shared_ptr<RemotePushIU> iu = boost::static_pointer_cast<RemotePushIU>(event->getData());
 		if (_iu_store.count(iu->category()) > 0) {
 			// already got the IU... ignore
@@ -837,6 +870,7 @@ IPAACA_EXPORT void InputBuffer::_handle_iu_events(EventPtr event)
 		}
 		//IPAACA_INFO( "New RemotePushIU state: " << (*iu) )
 	} else if (type == "ipaaca::RemoteMessage") {
+		std::cout << "ipaaca::RemoteMessage" << std::endl;
 		boost::shared_ptr<RemoteMessage> iu = boost::static_pointer_cast<RemoteMessage>(event->getData());
 		//_iu_store[iu->uid()] = iu;
 		//iu->_set_buffer(this);
@@ -844,17 +878,21 @@ IPAACA_EXPORT void InputBuffer::_handle_iu_events(EventPtr event)
 		call_iu_event_handlers(iu, false, IU_MESSAGE, iu->category() );
 		//_iu_store.erase(iu->uid());
 	} else {
+		std::cout << "elseeeeeee" << std::endl;
 		RemotePushIUStore::iterator it;
 		if (type == "ipaaca::IUPayloadUpdate") {
+			std::cout << "ipaaca::IUPayloadUpdate" << std::endl;
 			boost::shared_ptr<IUPayloadUpdate> update = boost::static_pointer_cast<IUPayloadUpdate>(event->getData());
 			//IPAACA_INFO("** writer name: " << update->writer_name)
+			std::cout << "writer name " << update->writer_name << std::endl;
 			if (update->writer_name == _unique_name) {
 				return;
 			}
 			it = _iu_store.find(update->uid);
 			if (it == _iu_store.end()) {
+				std::cout << "Using UPDATED message for an IU that we did not fully receive before" << update->writer_name << std::endl;
 				_trigger_resend_request(event);
-				IPAACA_INFO("Ignoring UPDATED message for an IU that we did not fully receive before")
+				IPAACA_INFO("Using UPDATED message for an IU that we did not fully receive before")
 				return;
 			}
 			//
@@ -1043,6 +1081,32 @@ IPAACA_EXPORT void IU::_modify_links(bool is_delta, const LinkMap& new_links, co
 	}
 	_revision_lock.unlock();
 }
+
+
+IPAACA_EXPORT void IU::_publish_resend(IU::ptr iu, const std::string& hidden_scope_name)
+{
+	//_revision_lock.lock();
+	//if (_committed) {
+	//	_revision_lock.unlock();
+	//	throw IUCommittedError();
+	//}
+	//_increase_revision_number();
+	//if (is_published()) {
+//IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name
+//dlw TODO
+//	IU::ptr iu = boost::static_pointer_cast<IU>(this);
+	//IU::ptr iu = boost::make_static(this);
+
+	_buffer->_publish_iu_resend(iu, hidden_scope_name);
+
+	//}
+	//_revision_lock.unlock();
+}
+
+
+
+
+
 IPAACA_EXPORT void IU::_modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name)
 {
 	_revision_lock.lock();
diff --git a/ipaacalib/cpp/test/src/Makefile b/ipaacalib/cpp/test/src/Makefile
index 11a2336bdded24ce11d4832b37928f1b9ec3beb3..ff3b45be572668655974721966705405b016ae11 100644
--- a/ipaacalib/cpp/test/src/Makefile
+++ b/ipaacalib/cpp/test/src/Makefile
@@ -2,7 +2,7 @@ CONFIG = -DIPAACA_DEBUG_MESSAGES
 #IPAACASOURCES = ../../src/ipaaca.cc ipaaca.pb.cc
 #TEXTSOURCES = ${IPAACASOURCES} testipaaca.cc
 TEXTSOURCES = testipaaca.cc
-CCFLAGS=-I../../../../deps/include -I../../../../dist/include -I. -I../../src -I/usr/local/include -I/opt/local/include ${CONFIG}
+CCFLAGS=-I../../build -I../../../../deps/include -I../../../../dist/include -I. -I../../src -I/usr/local/include -I/opt/local/include ${CONFIG}
 BOOSTLIBS = -L/opt/local/lib -lboost_regex-mt -lboost_date_time-mt -lboost_thread-mt 
 PROTOLIBS = -L/opt/local/lib -lprotobuf
 #LIBS = ${BOOSTLIBS} ${PROTOLIBS} -L/usr/local/lib -lrsc -lrsbcore
diff --git a/ipaacalib/cpp/test/src/Makefile~ b/ipaacalib/cpp/test/src/Makefile~
new file mode 100644
index 0000000000000000000000000000000000000000..6227f8f6720efbc3993471f65520989c5f5b0fbc
--- /dev/null
+++ b/ipaacalib/cpp/test/src/Makefile~
@@ -0,0 +1,27 @@
+CONFIG = -DIPAACA_DEBUG_MESSAGES
+#IPAACASOURCES = ../../src/ipaaca.cc ipaaca.pb.cc
+#TEXTSOURCES = ${IPAACASOURCES} testipaaca.cc
+TEXTSOURCES = testipaaca.cc
+CCFLAGS=-I../../build -I../../../../deps/include -I../../../../dist/include -I. -I../../src -I/usr/local/include -I/opt/local/include ${CONFIG}
+BOOSTLIBS = -L/opt/local/lib -lboost_regex-mt -lboost_date_time-mt -lboost_thread-mt 
+PROTOLIBS = -L/opt/local/lib -lprotobuf
+#LIBS = ${BOOSTLIBS} ${PROTOLIBS} -L/usr/local/lib -lrsc -lrsbcore
+#LIBS = -L../../../../deps/lib -L../../../../dist/lib -lipaaca
+LIBS = -L../../build -L../../../../deps/lib -L../../../../dist/lib -lipaaca
+
+#COMPILER = gfilt
+COMPILER = gcc
+
+all: testipaaca
+	
+
+testipaaca:
+	${COMPILER} ${CCFLAGS} -o testipaaca ${TEXTSOURCES} ${LIBS}
+
+protoc:
+	protoc --proto_path=../../../proto ../../../proto/ipaaca.proto --cpp_out=.
+
+clean:
+	rm -f testipaaca ipaaca.pb.h ipaaca.pb.cc
+
+
diff --git a/ipaacalib/cpp/test/src/testipaaca.cc b/ipaacalib/cpp/test/src/testipaaca.cc
index 0de077af57c46d9bed0a44077c18709d9a9c0873..828136ba81da19eaf49546b225f229788c5ed986 100644
--- a/ipaacalib/cpp/test/src/testipaaca.cc
+++ b/ipaacalib/cpp/test/src/testipaaca.cc
@@ -138,7 +138,7 @@ void TextSender::publish_text_to_print(const std::string& text, const std::strin
 	}
 }
 	
-int old_main() {
+int main() {
 	TextSender sender;
 	sleep(1);
 	sender.publish_text_to_print("(INIT)");
@@ -146,7 +146,7 @@ int old_main() {
 	while (true) sleep(1);
 }
 
-int main() {
+int old_main() {
 	std::cerr << "TODO: implement Ipaaca C++ test cases." << std::endl;
 	return 0;
 }