From f4c79204290f6887ecbe87b7b0e893e30cbd2732 Mon Sep 17 00:00:00 2001
From: Herwin van Welbergen <hvanwelbergen@TechFak.Uni-Bielefeld.DE>
Date: Mon, 19 Mar 2012 10:01:12 +0100
Subject: [PATCH] ant compilation of protocol buffers

---
 java/test/findbugs.xml                       |  337 +
 proto/build.properties                       |    4 +
 proto/build.xml                              |    4 +
 proto/build/cpp/src/ipaaca.pb.cc             | 3292 +++++++++
 proto/build/cpp/src/ipaaca.pb.h              | 2470 +++++++
 proto/build/java/ipaaca/protobuf/Ipaaca.java | 6387 ++++++++++++++++++
 proto/build/python/src/ipaaca_pb2.py         |  507 ++
 proto/ivy.xml                                |    6 +
 proto/{ => src}/ipaaca.proto                 |    0
 9 files changed, 13007 insertions(+)
 create mode 100644 java/test/findbugs.xml
 create mode 100644 proto/build.properties
 create mode 100644 proto/build.xml
 create mode 100644 proto/build/cpp/src/ipaaca.pb.cc
 create mode 100644 proto/build/cpp/src/ipaaca.pb.h
 create mode 100644 proto/build/java/ipaaca/protobuf/Ipaaca.java
 create mode 100644 proto/build/python/src/ipaaca_pb2.py
 create mode 100644 proto/ivy.xml
 rename proto/{ => src}/ipaaca.proto (100%)

diff --git a/java/test/findbugs.xml b/java/test/findbugs.xml
new file mode 100644
index 0000000..59ce297
--- /dev/null
+++ b/java/test/findbugs.xml
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<BugCollection version="1.3.9" sequence="0" timestamp="1331224756097" analysisTimestamp="1331224757021" release="">
+  <Project projectName="">
+    <Jar>/homes/hvanwelbergen/git_pool/ipaaca/java/build</Jar>
+    <SrcDir>/homes/hvanwelbergen/git_pool/ipaaca/java/src</SrcDir>
+    <SrcDir>/homes/hvanwelbergen/git_pool/ipaaca/java/test/src</SrcDir>
+  </Project>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$IU$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$IU$Builder" start="1" end="3024" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$IU$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$IU$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$IUCommission$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$IUCommission$Builder" start="1" end="5034" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$IUCommission$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$IUCommission$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$IULinkUpdate$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$IULinkUpdate$Builder" start="1" end="6219" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$IULinkUpdate$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$IULinkUpdate$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$IUPayloadUpdate$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$IUPayloadUpdate$Builder" start="1" end="4036" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$IUPayloadUpdate$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$IUPayloadUpdate$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$IURetraction$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$IURetraction$Builder" start="1" end="4483" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$IURetraction$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$IURetraction$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$IntMessage$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$IntMessage$Builder" start="1" end="343" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$IntMessage$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$IntMessage$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$LinkSet$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$LinkSet$Builder" start="1" end="838" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$LinkSet$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$LinkSet$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" priority="1" abbrev="CN" category="BAD_PRACTICE">
+    <Class classname="ipaaca.Ipaaca$PayloadItem$Builder">
+      <SourceLine classname="ipaaca.Ipaaca$PayloadItem$Builder" start="1" end="1425" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Class>
+    <Method classname="ipaaca.Ipaaca$PayloadItem$Builder" name="clone" signature="()Lcom/google/protobuf/GeneratedMessage$Builder;" isStatic="false">
+      <SourceLine classname="ipaaca.Ipaaca$PayloadItem$Builder" start="1" end="1" startBytecode="0" endBytecode="36" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+  </BugInstance>
+  <BugInstance type="OS_OPEN_STREAM" priority="2" abbrev="OS" category="BAD_PRACTICE">
+    <Class classname="ipaaca.JavaPythonTest">
+      <SourceLine classname="ipaaca.JavaPythonTest" start="18" end="186" sourcefile="JavaPythonTest.java" sourcepath="ipaaca/JavaPythonTest.java"/>
+    </Class>
+    <Method classname="ipaaca.JavaPythonTest" name="printRuntimeErrors" signature="(Ljava/lang/Process;)V" isStatic="false">
+      <SourceLine classname="ipaaca.JavaPythonTest" start="43" end="75" startBytecode="0" endBytecode="72" sourcefile="JavaPythonTest.java" sourcepath="ipaaca/JavaPythonTest.java"/>
+    </Method>
+    <Type descriptor="Ljava/io/Reader;" role="TYPE_CLOSEIT">
+      <SourceLine classname="java.io.Reader" start="49" end="232" sourcefile="Reader.java" sourcepath="java/io/Reader.java"/>
+    </Type>
+    <SourceLine classname="ipaaca.JavaPythonTest" start="46" end="46" startBytecode="24" endBytecode="24" sourcefile="JavaPythonTest.java" sourcepath="ipaaca/JavaPythonTest.java"/>
+    <SourceLine classname="ipaaca.JavaPythonTest" start="69" end="69" startBytecode="126" endBytecode="126" sourcefile="JavaPythonTest.java" sourcepath="ipaaca/JavaPythonTest.java" role="SOURCE_LINE_ANOTHER_INSTANCE"/>
+  </BugInstance>
+  <BugInstance type="NP_NULL_PARAM_DEREF" priority="2" abbrev="NP" category="CORRECTNESS">
+    <Class classname="ipaaca.LocalIU">
+      <SourceLine classname="ipaaca.LocalIU" start="23" end="250" sourcefile="LocalIU.java" sourcepath="ipaaca/LocalIU.java"/>
+    </Class>
+    <Method classname="ipaaca.LocalIU" name="modifyLinks" signature="(ZLcom/google/common/collect/SetMultimap;Lcom/google/common/collect/SetMultimap;Ljava/lang/String;)V" isStatic="false">
+      <SourceLine classname="ipaaca.LocalIU" start="112" end="154" startBytecode="0" endBytecode="771" sourcefile="LocalIU.java" sourcepath="ipaaca/LocalIU.java"/>
+    </Method>
+    <Method classname="ipaaca.Ipaaca$IULinkUpdate$Builder" name="setWriterName" signature="(Ljava/lang/String;)Lipaaca/Ipaaca$IULinkUpdate$Builder;" isStatic="false" role="METHOD_CALLED">
+      <SourceLine classname="ipaaca.Ipaaca$IULinkUpdate$Builder" start="6201" end="6207" startBytecode="0" endBytecode="114" sourcefile="Ipaaca.java" sourcepath="ipaaca/Ipaaca.java"/>
+    </Method>
+    <Int value="1" role="INT_MAYBE_NULL_ARG"/>
+    <LocalVariable name="?" register="-1" pc="281" role="LOCAL_VARIABLE_UNKNOWN"/>
+    <SourceLine classname="ipaaca.LocalIU" start="147" end="147" startBytecode="281" endBytecode="281" sourcefile="LocalIU.java" sourcepath="ipaaca/LocalIU.java" role="SOURCE_LINE_INVOKED"/>
+    <SourceLine classname="ipaaca.LocalIU" start="132" end="132" startBytecode="71" endBytecode="71" sourcefile="LocalIU.java" sourcepath="ipaaca/LocalIU.java" role="SOURCE_LINE_KNOWN_NULL"/>
+    <Property name="edu.umd.cs.findbugs.detect.NullDerefProperty.LONG_RANGE_NULL_SOURCE" value="true"/>
+  </BugInstance>
+  <BugInstance type="SBSC_USE_STRINGBUFFER_CONCATENATION" priority="2" abbrev="SBSC" category="PERFORMANCE">
+    <Class classname="ipaacademo.TextPrinter$UpdateThread">
+      <SourceLine classname="ipaacademo.TextPrinter$UpdateThread" start="52" end="101" sourcefile="TextPrinter.java" sourcepath="ipaacademo/TextPrinter.java"/>
+    </Class>
+    <Method classname="ipaacademo.TextPrinter$UpdateThread" name="run" signature="()V" isStatic="false">
+      <SourceLine classname="ipaacademo.TextPrinter$UpdateThread" start="61" end="62" startBytecode="0" endBytecode="559" sourcefile="TextPrinter.java" sourcepath="ipaacademo/TextPrinter.java"/>
+    </Method>
+    <SourceLine classname="ipaacademo.TextPrinter$UpdateThread" start="82" end="82" startBytecode="101" endBytecode="101" sourcefile="TextPrinter.java" sourcepath="ipaacademo/TextPrinter.java"/>
+  </BugInstance>
+  <Errors errors="0" missingClasses="72">
+    <MissingClass>com.google.common.collect.HashMultimap</MissingClass>
+    <MissingClass>com.google.common.collect.ImmutableMap</MissingClass>
+    <MissingClass>com.google.common.collect.ImmutableSet</MissingClass>
+    <MissingClass>com.google.common.collect.ImmutableSet$Builder</MissingClass>
+    <MissingClass>com.google.common.collect.Multimap</MissingClass>
+    <MissingClass>com.google.common.collect.SetMultimap</MissingClass>
+    <MissingClass>com.google.protobuf.AbstractMessage</MissingClass>
+    <MissingClass>com.google.protobuf.AbstractMessage$Builder</MissingClass>
+    <MissingClass>com.google.protobuf.ByteString</MissingClass>
+    <MissingClass>com.google.protobuf.CodedInputStream</MissingClass>
+    <MissingClass>com.google.protobuf.CodedOutputStream</MissingClass>
+    <MissingClass>com.google.protobuf.Descriptors</MissingClass>
+    <MissingClass>com.google.protobuf.Descriptors$Descriptor</MissingClass>
+    <MissingClass>com.google.protobuf.Descriptors$EnumDescriptor</MissingClass>
+    <MissingClass>com.google.protobuf.Descriptors$EnumValueDescriptor</MissingClass>
+    <MissingClass>com.google.protobuf.Descriptors$FileDescriptor</MissingClass>
+    <MissingClass>com.google.protobuf.Descriptors$FileDescriptor$InternalDescriptorAssigner</MissingClass>
+    <MissingClass>com.google.protobuf.ExtensionRegistryLite</MissingClass>
+    <MissingClass>com.google.protobuf.GeneratedMessage</MissingClass>
+    <MissingClass>com.google.protobuf.GeneratedMessage$Builder</MissingClass>
+    <MissingClass>com.google.protobuf.GeneratedMessage$BuilderParent</MissingClass>
+    <MissingClass>com.google.protobuf.GeneratedMessage$FieldAccessorTable</MissingClass>
+    <MissingClass>com.google.protobuf.Internal</MissingClass>
+    <MissingClass>com.google.protobuf.Internal$EnumLite</MissingClass>
+    <MissingClass>com.google.protobuf.Internal$EnumLiteMap</MissingClass>
+    <MissingClass>com.google.protobuf.InvalidProtocolBufferException</MissingClass>
+    <MissingClass>com.google.protobuf.LazyStringArrayList</MissingClass>
+    <MissingClass>com.google.protobuf.LazyStringList</MissingClass>
+    <MissingClass>com.google.protobuf.Message</MissingClass>
+    <MissingClass>com.google.protobuf.Message$Builder</MissingClass>
+    <MissingClass>com.google.protobuf.MessageLite</MissingClass>
+    <MissingClass>com.google.protobuf.MessageLite$Builder</MissingClass>
+    <MissingClass>com.google.protobuf.MessageOrBuilder</MissingClass>
+    <MissingClass>com.google.protobuf.ProtocolMessageEnum</MissingClass>
+    <MissingClass>com.google.protobuf.RepeatedFieldBuilder</MissingClass>
+    <MissingClass>com.google.protobuf.UninitializedMessageException</MissingClass>
+    <MissingClass>com.google.protobuf.UnknownFieldSet</MissingClass>
+    <MissingClass>com.google.protobuf.UnknownFieldSet$Builder</MissingClass>
+    <MissingClass>com.google.protobuf.UnmodifiableLazyStringList</MissingClass>
+    <MissingClass>org.hamcrest.Matcher</MissingClass>
+    <MissingClass>org.hamcrest.MatcherAssert</MissingClass>
+    <MissingClass>org.hamcrest.Matchers</MissingClass>
+    <MissingClass>org.hamcrest.collection.IsIterableContainingInAnyOrder</MissingClass>
+    <MissingClass>org.junit.After</MissingClass>
+    <MissingClass>org.junit.Assert</MissingClass>
+    <MissingClass>org.junit.Before</MissingClass>
+    <MissingClass>org.junit.Test</MissingClass>
+    <MissingClass>org.mockito.Matchers</MissingClass>
+    <MissingClass>org.mockito.Mockito</MissingClass>
+    <MissingClass>org.mockito.stubbing.OngoingStubbing</MissingClass>
+    <MissingClass>org.mockito.verification.VerificationMode</MissingClass>
+    <MissingClass>org.slf4j.Logger</MissingClass>
+    <MissingClass>org.slf4j.LoggerFactory</MissingClass>
+    <MissingClass>rsb.Event</MissingClass>
+    <MissingClass>rsb.Factory</MissingClass>
+    <MissingClass>rsb.Handler</MissingClass>
+    <MissingClass>rsb.Informer</MissingClass>
+    <MissingClass>rsb.InitializeException</MissingClass>
+    <MissingClass>rsb.Listener</MissingClass>
+    <MissingClass>rsb.RSBException</MissingClass>
+    <MissingClass>rsb.Scope</MissingClass>
+    <MissingClass>rsb.converter.ConversionException</MissingClass>
+    <MissingClass>rsb.converter.Converter</MissingClass>
+    <MissingClass>rsb.converter.ConverterRepository</MissingClass>
+    <MissingClass>rsb.converter.ConverterSignature</MissingClass>
+    <MissingClass>rsb.converter.DefaultConverterRepository</MissingClass>
+    <MissingClass>rsb.converter.ProtocolBufferConverter</MissingClass>
+    <MissingClass>rsb.converter.UserData</MissingClass>
+    <MissingClass>rsb.converter.WireContents</MissingClass>
+    <MissingClass>rsb.patterns.DataCallback</MissingClass>
+    <MissingClass>rsb.patterns.LocalServer</MissingClass>
+    <MissingClass>rsb.patterns.RemoteServer</MissingClass>
+  </Errors>
+  <FindBugsSummary timestamp="Thu, 8 Mar 2012 17:39:16 +0100" total_classes="64" referenced_classes="159" total_bugs="11" total_size="6091" num_packages="2" vm_version="19.1-b02" cpu_seconds="25.20" clock_seconds="8.59" peak_mbytes="216.40" alloc_mbytes="455.12" gc_seconds="0.50" priority_2="3" priority_1="8">
+    <PackageStats package="ipaaca" total_bugs="10" total_types="61" total_size="6002" priority_2="2" priority_1="8">
+      <ClassStats class="ipaaca.AbstractIU" sourceFile="AbstractIU.java" interface="false" size="115" bugs="0"/>
+      <ClassStats class="ipaaca.Buffer" sourceFile="Buffer.java" interface="false" size="24" bugs="0"/>
+      <ClassStats class="ipaaca.ComponentCommunicationIntegrationTest" sourceFile="ComponentCommunicationIntegrationTest.java" interface="false" size="205" bugs="0"/>
+      <ClassStats class="ipaaca.ComponentCommunicationIntegrationTest$MyEventHandler" sourceFile="ComponentCommunicationIntegrationTest.java" interface="false" size="37" bugs="0"/>
+      <ClassStats class="ipaaca.HandlerFunctor" sourceFile="HandlerFunctor.java" interface="true" size="2" bugs="0"/>
+      <ClassStats class="ipaaca.IUAccessMode" sourceFile="IUAccessMode.java" interface="false" size="12" bugs="0"/>
+      <ClassStats class="ipaaca.IUCommittedException" sourceFile="IUCommittedException.java" interface="false" size="9" bugs="0"/>
+      <ClassStats class="ipaaca.IUConverter" sourceFile="IUConverter.java" interface="false" size="53" bugs="0"/>
+      <ClassStats class="ipaaca.IUEventHandler" sourceFile="IUEventHandler.java" interface="false" size="17" bugs="0"/>
+      <ClassStats class="ipaaca.IUEventType" sourceFile="IUEventType.java" interface="false" size="15" bugs="0"/>
+      <ClassStats class="ipaaca.IUPublishedException" sourceFile="IUPublishedException.java" interface="false" size="9" bugs="0"/>
+      <ClassStats class="ipaaca.IUReadOnlyException" sourceFile="IUReadOnlyException.java" interface="false" size="9" bugs="0"/>
+      <ClassStats class="ipaaca.IUStore" sourceFile="IUStore.java" interface="false" size="4" bugs="0"/>
+      <ClassStats class="ipaaca.IUTestUtil" sourceFile="IUTestUtil.java" interface="false" size="48" bugs="0"/>
+      <ClassStats class="ipaaca.IUUpdateFailedException" sourceFile="IUUpdateFailedException.java" interface="false" size="9" bugs="0"/>
+      <ClassStats class="ipaaca.Info" sourceFile="Info.java" interface="false" size="58" bugs="0"/>
+      <ClassStats class="ipaaca.Initializer" sourceFile="Initializer.java" interface="false" size="16" bugs="0"/>
+      <ClassStats class="ipaaca.InputBuffer" sourceFile="InputBuffer.java" interface="false" size="99" bugs="0"/>
+      <ClassStats class="ipaaca.InputBuffer$InputHandler" sourceFile="InputBuffer.java" interface="false" size="7" bugs="0"/>
+      <ClassStats class="ipaaca.InputBufferTest" sourceFile="InputBufferTest.java" interface="false" size="29" bugs="0"/>
+      <ClassStats class="ipaaca.IntConverter" sourceFile="IntConverter.java" interface="false" size="18" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca" sourceFile="Ipaaca.java" interface="false" size="85" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$1" sourceFile="Ipaaca.java" interface="false" size="71" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IU" sourceFile="Ipaaca.java" interface="false" size="349" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IU$AccessMode" sourceFile="Ipaaca.java" interface="false" size="50" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IU$AccessMode$1" sourceFile="Ipaaca.java" interface="false" size="7" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IU$Builder" sourceFile="Ipaaca.java" interface="false" size="676" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$IUCommission" sourceFile="Ipaaca.java" interface="false" size="182" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IUCommission$Builder" sourceFile="Ipaaca.java" interface="false" size="202" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$IUCommissionOrBuilder" sourceFile="Ipaaca.java" interface="true" size="7" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IULinkUpdate" sourceFile="Ipaaca.java" interface="false" size="249" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IULinkUpdate$Builder" sourceFile="Ipaaca.java" interface="false" size="535" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$IULinkUpdateOrBuilder" sourceFile="Ipaaca.java" interface="true" size="19" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IUOrBuilder" sourceFile="Ipaaca.java" interface="true" size="27" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IUPayloadUpdate" sourceFile="Ipaaca.java" interface="false" size="244" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IUPayloadUpdate$Builder" sourceFile="Ipaaca.java" interface="false" size="441" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$IUPayloadUpdateOrBuilder" sourceFile="Ipaaca.java" interface="true" size="17" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IURetraction" sourceFile="Ipaaca.java" interface="false" size="149" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IURetraction$Builder" sourceFile="Ipaaca.java" interface="false" size="162" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$IURetractionOrBuilder" sourceFile="Ipaaca.java" interface="true" size="5" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IntMessage" sourceFile="Ipaaca.java" interface="false" size="116" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$IntMessage$Builder" sourceFile="Ipaaca.java" interface="false" size="122" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$IntMessageOrBuilder" sourceFile="Ipaaca.java" interface="true" size="3" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$LinkSet" sourceFile="Ipaaca.java" interface="false" size="152" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$LinkSet$Builder" sourceFile="Ipaaca.java" interface="false" size="194" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$LinkSetOrBuilder" sourceFile="Ipaaca.java" interface="true" size="6" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$PayloadItem" sourceFile="Ipaaca.java" interface="false" size="198" bugs="0"/>
+      <ClassStats class="ipaaca.Ipaaca$PayloadItem$Builder" sourceFile="Ipaaca.java" interface="false" size="215" bugs="1" priority_1="1"/>
+      <ClassStats class="ipaaca.Ipaaca$PayloadItemOrBuilder" sourceFile="Ipaaca.java" interface="true" size="7" bugs="0"/>
+      <ClassStats class="ipaaca.IuConverterTest" sourceFile="IuConverterTest.java" interface="false" size="69" bugs="0"/>
+      <ClassStats class="ipaaca.JavaPythonTest" sourceFile="JavaPythonTest.java" interface="false" size="81" bugs="1" priority_2="1"/>
+      <ClassStats class="ipaaca.LinkUpdateConverter" sourceFile="LinkUpdateConverter.java" interface="false" size="16" bugs="0"/>
+      <ClassStats class="ipaaca.LocalIU" sourceFile="LocalIU.java" interface="false" size="113" bugs="1" priority_2="1"/>
+      <ClassStats class="ipaaca.LocalIUTest" sourceFile="LocalIUTest.java" interface="false" size="29" bugs="0"/>
+      <ClassStats class="ipaaca.OutputBuffer" sourceFile="OutputBuffer.java" interface="false" size="140" bugs="0"/>
+      <ClassStats class="ipaaca.OutputBuffer$RemoteCommit" sourceFile="OutputBuffer.java" interface="false" size="10" bugs="0"/>
+      <ClassStats class="ipaaca.OutputBuffer$RemoteUpdateLinks" sourceFile="OutputBuffer.java" interface="false" size="10" bugs="0"/>
+      <ClassStats class="ipaaca.OutputBuffer$RemoteUpdatePayload" sourceFile="OutputBuffer.java" interface="false" size="10" bugs="0"/>
+      <ClassStats class="ipaaca.Payload" sourceFile="Payload.java" interface="false" size="79" bugs="0"/>
+      <ClassStats class="ipaaca.PayloadConverter" sourceFile="PayloadConverter.java" interface="false" size="16" bugs="0"/>
+      <ClassStats class="ipaaca.RemotePushIU" sourceFile="RemotePushIU.java" interface="false" size="144" bugs="0"/>
+    </PackageStats>
+    <PackageStats package="ipaacademo" total_bugs="1" total_types="3" total_size="89" priority_2="1">
+      <ClassStats class="ipaacademo.PythonCall" sourceFile="PythonCall.java" interface="false" size="23" bugs="0"/>
+      <ClassStats class="ipaacademo.TextPrinter" sourceFile="TextPrinter.java" interface="false" size="37" bugs="0"/>
+      <ClassStats class="ipaacademo.TextPrinter$UpdateThread" sourceFile="TextPrinter.java" interface="false" size="29" bugs="1" priority_2="1"/>
+    </PackageStats>
+    <FindBugsProfile>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindUncalledPrivateMethods" totalMilliseconds="11" invocations="64" avgMicrosecondsPerInvocation="175" maxMicrosecondsPerInvocation="1115" standardDeviationMircosecondsPerInvocation="219"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.ConstantPoolGenFactory" totalMilliseconds="12" invocations="64" avgMicrosecondsPerInvocation="187" maxMicrosecondsPerInvocation="3262" standardDeviationMircosecondsPerInvocation="403"/>
+      <ClassProfile name="edu.umd.cs.findbugs.util.TopologicalSort" totalMilliseconds="12" invocations="65" avgMicrosecondsPerInvocation="190" maxMicrosecondsPerInvocation="2175" standardDeviationMircosecondsPerInvocation="315"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.SerializableIdiom" totalMilliseconds="12" invocations="64" avgMicrosecondsPerInvocation="193" maxMicrosecondsPerInvocation="1797" standardDeviationMircosecondsPerInvocation="249"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.LoadedFieldSetFactory" totalMilliseconds="13" invocations="1268" avgMicrosecondsPerInvocation="10" maxMicrosecondsPerInvocation="431" standardDeviationMircosecondsPerInvocation="18"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindUnsatisfiedObligation" totalMilliseconds="13" invocations="64" avgMicrosecondsPerInvocation="211" maxMicrosecondsPerInvocation="2332" standardDeviationMircosecondsPerInvocation="428"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindSelfComparison2" totalMilliseconds="13" invocations="64" avgMicrosecondsPerInvocation="217" maxMicrosecondsPerInvocation="1786" standardDeviationMircosecondsPerInvocation="321"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindReturnRef" totalMilliseconds="15" invocations="64" avgMicrosecondsPerInvocation="247" maxMicrosecondsPerInvocation="1829" standardDeviationMircosecondsPerInvocation="350"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.AppendingToAnObjectOutputStream" totalMilliseconds="16" invocations="64" avgMicrosecondsPerInvocation="251" maxMicrosecondsPerInvocation="1707" standardDeviationMircosecondsPerInvocation="326"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.NumberConstructor" totalMilliseconds="16" invocations="64" avgMicrosecondsPerInvocation="252" maxMicrosecondsPerInvocation="1655" standardDeviationMircosecondsPerInvocation="317"/>
+      <ClassProfile name="edu.umd.cs.findbugs.NonReportingDetectorToDetector2Adapter" totalMilliseconds="16" invocations="2195" avgMicrosecondsPerInvocation="7" maxMicrosecondsPerInvocation="56" standardDeviationMircosecondsPerInvocation="2"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindFloatEquality" totalMilliseconds="16" invocations="64" avgMicrosecondsPerInvocation="256" maxMicrosecondsPerInvocation="1695" standardDeviationMircosecondsPerInvocation="322"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindFieldSelfAssignment" totalMilliseconds="16" invocations="64" avgMicrosecondsPerInvocation="259" maxMicrosecondsPerInvocation="1684" standardDeviationMircosecondsPerInvocation="330"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.ReverseDepthFirstSearchFactory" totalMilliseconds="16" invocations="1123" avgMicrosecondsPerInvocation="14" maxMicrosecondsPerInvocation="536" standardDeviationMircosecondsPerInvocation="26"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.SynchronizingOnContentsOfFieldToProtectField" totalMilliseconds="17" invocations="64" avgMicrosecondsPerInvocation="269" maxMicrosecondsPerInvocation="1713" standardDeviationMircosecondsPerInvocation="341"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.BadResultSetAccess" totalMilliseconds="17" invocations="64" avgMicrosecondsPerInvocation="271" maxMicrosecondsPerInvocation="1683" standardDeviationMircosecondsPerInvocation="330"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.SynchronizationOnSharedBuiltinConstant" totalMilliseconds="17" invocations="64" avgMicrosecondsPerInvocation="275" maxMicrosecondsPerInvocation="1738" standardDeviationMircosecondsPerInvocation="336"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FormatStringChecker" totalMilliseconds="17" invocations="64" avgMicrosecondsPerInvocation="278" maxMicrosecondsPerInvocation="1765" standardDeviationMircosecondsPerInvocation="355"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass" totalMilliseconds="17" invocations="64" avgMicrosecondsPerInvocation="278" maxMicrosecondsPerInvocation="1929" standardDeviationMircosecondsPerInvocation="409"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.BadSyntaxForRegularExpression" totalMilliseconds="17" invocations="64" avgMicrosecondsPerInvocation="280" maxMicrosecondsPerInvocation="1826" standardDeviationMircosecondsPerInvocation="358"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.CrossSiteScripting" totalMilliseconds="18" invocations="64" avgMicrosecondsPerInvocation="284" maxMicrosecondsPerInvocation="1873" standardDeviationMircosecondsPerInvocation="361"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.ObligationDataflowFactory" totalMilliseconds="18" invocations="447" avgMicrosecondsPerInvocation="41" maxMicrosecondsPerInvocation="3665" standardDeviationMircosecondsPerInvocation="173"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindBadForLoop" totalMilliseconds="18" invocations="64" avgMicrosecondsPerInvocation="293" maxMicrosecondsPerInvocation="1830" standardDeviationMircosecondsPerInvocation="371"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.DumbMethodInvocations" totalMilliseconds="18" invocations="64" avgMicrosecondsPerInvocation="294" maxMicrosecondsPerInvocation="2837" standardDeviationMircosecondsPerInvocation="500"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.InfiniteRecursiveLoop" totalMilliseconds="19" invocations="64" avgMicrosecondsPerInvocation="298" maxMicrosecondsPerInvocation="1836" standardDeviationMircosecondsPerInvocation="390"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.LostLoggerDueToWeakReference" totalMilliseconds="19" invocations="64" avgMicrosecondsPerInvocation="309" maxMicrosecondsPerInvocation="1930" standardDeviationMircosecondsPerInvocation="394"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.DepthFirstSearchFactory" totalMilliseconds="20" invocations="1520" avgMicrosecondsPerInvocation="13" maxMicrosecondsPerInvocation="553" standardDeviationMircosecondsPerInvocation="23"/>
+      <ClassProfile name="edu.umd.cs.findbugs.DetectorToDetector2Adapter" totalMilliseconds="20" invocations="7135" avgMicrosecondsPerInvocation="2" maxMicrosecondsPerInvocation="64" standardDeviationMircosecondsPerInvocation="2"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindUnrelatedTypesInGenericContainer" totalMilliseconds="20" invocations="64" avgMicrosecondsPerInvocation="326" maxMicrosecondsPerInvocation="2813" standardDeviationMircosecondsPerInvocation="505"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindNonShortCircuit" totalMilliseconds="21" invocations="64" avgMicrosecondsPerInvocation="328" maxMicrosecondsPerInvocation="2172" standardDeviationMircosecondsPerInvocation="430"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.StreamResourceTracker" totalMilliseconds="21" invocations="21" avgMicrosecondsPerInvocation="1008" maxMicrosecondsPerInvocation="1622" standardDeviationMircosecondsPerInvocation="187"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindHEmismatch" totalMilliseconds="23" invocations="64" avgMicrosecondsPerInvocation="362" maxMicrosecondsPerInvocation="3891" standardDeviationMircosecondsPerInvocation="557"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.MethodReturnCheck" totalMilliseconds="23" invocations="64" avgMicrosecondsPerInvocation="368" maxMicrosecondsPerInvocation="2568" standardDeviationMircosecondsPerInvocation="482"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.InfiniteLoop" totalMilliseconds="23" invocations="64" avgMicrosecondsPerInvocation="371" maxMicrosecondsPerInvocation="2247" standardDeviationMircosecondsPerInvocation="481"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.RepeatedConditionals" totalMilliseconds="24" invocations="64" avgMicrosecondsPerInvocation="378" maxMicrosecondsPerInvocation="2526" standardDeviationMircosecondsPerInvocation="501"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindBadCast2" totalMilliseconds="25" invocations="64" avgMicrosecondsPerInvocation="393" maxMicrosecondsPerInvocation="2348" standardDeviationMircosecondsPerInvocation="542"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.impl.ZipCodeBaseFactory" totalMilliseconds="25" invocations="14" avgMicrosecondsPerInvocation="1806" maxMicrosecondsPerInvocation="23482" standardDeviationMircosecondsPerInvocation="6013"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.RuntimeExceptionCapture" totalMilliseconds="27" invocations="64" avgMicrosecondsPerInvocation="424" maxMicrosecondsPerInvocation="2570" standardDeviationMircosecondsPerInvocation="532"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindSelfComparison" totalMilliseconds="27" invocations="64" avgMicrosecondsPerInvocation="431" maxMicrosecondsPerInvocation="2891" standardDeviationMircosecondsPerInvocation="585"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.DuplicateBranches" totalMilliseconds="28" invocations="64" avgMicrosecondsPerInvocation="444" maxMicrosecondsPerInvocation="5597" standardDeviationMircosecondsPerInvocation="1014"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindSqlInjection" totalMilliseconds="28" invocations="64" avgMicrosecondsPerInvocation="444" maxMicrosecondsPerInvocation="3234" standardDeviationMircosecondsPerInvocation="600"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindPuzzlers" totalMilliseconds="32" invocations="64" avgMicrosecondsPerInvocation="503" maxMicrosecondsPerInvocation="3050" standardDeviationMircosecondsPerInvocation="647"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindDeadLocalStores" totalMilliseconds="35" invocations="64" avgMicrosecondsPerInvocation="551" maxMicrosecondsPerInvocation="3275" standardDeviationMircosecondsPerInvocation="698"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindNullDeref" totalMilliseconds="36" invocations="64" avgMicrosecondsPerInvocation="566" maxMicrosecondsPerInvocation="4243" standardDeviationMircosecondsPerInvocation="876"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.ReflectiveClasses" totalMilliseconds="36" invocations="159" avgMicrosecondsPerInvocation="229" maxMicrosecondsPerInvocation="5220" standardDeviationMircosecondsPerInvocation="583"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.UnreadFields" totalMilliseconds="43" invocations="64" avgMicrosecondsPerInvocation="676" maxMicrosecondsPerInvocation="4082" standardDeviationMircosecondsPerInvocation="868"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.DumbMethods" totalMilliseconds="47" invocations="64" avgMicrosecondsPerInvocation="734" maxMicrosecondsPerInvocation="4420" standardDeviationMircosecondsPerInvocation="944"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindNullDeref$CheckCallSitesAndReturnInstructions" totalMilliseconds="50" invocations="1065" avgMicrosecondsPerInvocation="46" maxMicrosecondsPerInvocation="1213" standardDeviationMircosecondsPerInvocation="84"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindRefComparison" totalMilliseconds="50" invocations="64" avgMicrosecondsPerInvocation="787" maxMicrosecondsPerInvocation="6427" standardDeviationMircosecondsPerInvocation="1137"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.SwitchFallthrough" totalMilliseconds="54" invocations="64" avgMicrosecondsPerInvocation="854" maxMicrosecondsPerInvocation="20855" standardDeviationMircosecondsPerInvocation="2625"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.NoteNonnullReturnValues" totalMilliseconds="55" invocations="64" avgMicrosecondsPerInvocation="870" maxMicrosecondsPerInvocation="5691" standardDeviationMircosecondsPerInvocation="1289"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.LoadOfKnownNullValue" totalMilliseconds="59" invocations="64" avgMicrosecondsPerInvocation="923" maxMicrosecondsPerInvocation="9619" standardDeviationMircosecondsPerInvocation="1598"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.EqualsOperandShouldHaveClassCompatibleWithThis" totalMilliseconds="64" invocations="159" avgMicrosecondsPerInvocation="407" maxMicrosecondsPerInvocation="3116" standardDeviationMircosecondsPerInvocation="582"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine" totalMilliseconds="65" invocations="821" avgMicrosecondsPerInvocation="79" maxMicrosecondsPerInvocation="679" standardDeviationMircosecondsPerInvocation="70"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindInconsistentSync2" totalMilliseconds="71" invocations="64" avgMicrosecondsPerInvocation="1109" maxMicrosecondsPerInvocation="10523" standardDeviationMircosecondsPerInvocation="1891"/>
+      <ClassProfile name="edu.umd.cs.findbugs.ba.npe.TypeQualifierNullnessAnnotationDatabase" totalMilliseconds="81" invocations="15796" avgMicrosecondsPerInvocation="5" maxMicrosecondsPerInvocation="2014" standardDeviationMircosecondsPerInvocation="20"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.CalledMethods" totalMilliseconds="82" invocations="159" avgMicrosecondsPerInvocation="521" maxMicrosecondsPerInvocation="7484" standardDeviationMircosecondsPerInvocation="1035"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.JavaClassAnalysisEngine" totalMilliseconds="84" invocations="217" avgMicrosecondsPerInvocation="391" maxMicrosecondsPerInvocation="13488" standardDeviationMircosecondsPerInvocation="1185"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.BuildObligationPolicyDatabase" totalMilliseconds="87" invocations="159" avgMicrosecondsPerInvocation="549" maxMicrosecondsPerInvocation="7707" standardDeviationMircosecondsPerInvocation="891"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.LiveLocalStoreDataflowFactory" totalMilliseconds="118" invocations="937" avgMicrosecondsPerInvocation="126" maxMicrosecondsPerInvocation="1817" standardDeviationMircosecondsPerInvocation="195"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.OverridingEqualsNotSymmetrical" totalMilliseconds="123" invocations="159" avgMicrosecondsPerInvocation="778" maxMicrosecondsPerInvocation="8332" standardDeviationMircosecondsPerInvocation="1247"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindOpenStream" totalMilliseconds="149" invocations="64" avgMicrosecondsPerInvocation="2330" maxMicrosecondsPerInvocation="20396" standardDeviationMircosecondsPerInvocation="4456"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.NoteDirectlyRelevantTypeQualifiers" totalMilliseconds="160" invocations="159" avgMicrosecondsPerInvocation="1010" maxMicrosecondsPerInvocation="15855" standardDeviationMircosecondsPerInvocation="2000"/>
+      <ClassProfile name="edu.umd.cs.findbugs.ba.obl.ObligationAnalysis" totalMilliseconds="164" invocations="447" avgMicrosecondsPerInvocation="369" maxMicrosecondsPerInvocation="6575" standardDeviationMircosecondsPerInvocation="639"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.ConstantDataflowFactory" totalMilliseconds="185" invocations="1268" avgMicrosecondsPerInvocation="146" maxMicrosecondsPerInvocation="2776" standardDeviationMircosecondsPerInvocation="244"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.MethodGenFactory" totalMilliseconds="189" invocations="1360" avgMicrosecondsPerInvocation="139" maxMicrosecondsPerInvocation="30907" standardDeviationMircosecondsPerInvocation="856"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindNullDerefsInvolvingNonShortCircuitEvaluation" totalMilliseconds="193" invocations="64" avgMicrosecondsPerInvocation="3028" maxMicrosecondsPerInvocation="178315" standardDeviationMircosecondsPerInvocation="22086"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.URLProblems" totalMilliseconds="224" invocations="64" avgMicrosecondsPerInvocation="3503" maxMicrosecondsPerInvocation="174969" standardDeviationMircosecondsPerInvocation="21632"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.CFGFactory" totalMilliseconds="255" invocations="1268" avgMicrosecondsPerInvocation="201" maxMicrosecondsPerInvocation="9257" standardDeviationMircosecondsPerInvocation="369"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine" totalMilliseconds="258" invocations="819" avgMicrosecondsPerInvocation="315" maxMicrosecondsPerInvocation="11229" standardDeviationMircosecondsPerInvocation="840"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FieldItemSummary" totalMilliseconds="293" invocations="159" avgMicrosecondsPerInvocation="1844" maxMicrosecondsPerInvocation="23120" standardDeviationMircosecondsPerInvocation="3301"/>
+      <ClassProfile name="edu.umd.cs.findbugs.OpcodeStack$JumpInfoFactory" totalMilliseconds="324" invocations="4560" avgMicrosecondsPerInvocation="71" maxMicrosecondsPerInvocation="2589" standardDeviationMircosecondsPerInvocation="131"/>
+      <ClassProfile name="edu.umd.cs.findbugs.detect.FindRefComparison$SpecialTypeAnalysis" totalMilliseconds="345" invocations="916" avgMicrosecondsPerInvocation="377" maxMicrosecondsPerInvocation="6276" standardDeviationMircosecondsPerInvocation="568"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.TypeDataflowFactory" totalMilliseconds="488" invocations="1271" avgMicrosecondsPerInvocation="384" maxMicrosecondsPerInvocation="16954" standardDeviationMircosecondsPerInvocation="759"/>
+      <ClassProfile name="edu.umd.cs.findbugs.ba.npe.NullDerefAndRedundantComparisonFinder" totalMilliseconds="496" invocations="1065" avgMicrosecondsPerInvocation="466" maxMicrosecondsPerInvocation="37192" standardDeviationMircosecondsPerInvocation="1442"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.ValueNumberDataflowFactory" totalMilliseconds="562" invocations="1523" avgMicrosecondsPerInvocation="369" maxMicrosecondsPerInvocation="10377" standardDeviationMircosecondsPerInvocation="684"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.IsNullValueDataflowFactory" totalMilliseconds="573" invocations="1268" avgMicrosecondsPerInvocation="452" maxMicrosecondsPerInvocation="10290" standardDeviationMircosecondsPerInvocation="809"/>
+      <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.UnconditionalValueDerefDataflowFactory" totalMilliseconds="659" invocations="1123" avgMicrosecondsPerInvocation="586" maxMicrosecondsPerInvocation="40507" standardDeviationMircosecondsPerInvocation="1915"/>
+    </FindBugsProfile>
+  </FindBugsSummary>
+  <ClassFeatures></ClassFeatures>
+  <History></History>
+</BugCollection>
diff --git a/proto/build.properties b/proto/build.properties
new file mode 100644
index 0000000..c6cb709
--- /dev/null
+++ b/proto/build.properties
@@ -0,0 +1,4 @@
+language=proto
+resolve.status=beta
+resource.path=
+rebuild.list=
diff --git a/proto/build.xml b/proto/build.xml
new file mode 100644
index 0000000..7be237d
--- /dev/null
+++ b/proto/build.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="IpaacaJava"  default="run">
+   <import file="../../soashared/ant/build.xml" />
+</project>
diff --git a/proto/build/cpp/src/ipaaca.pb.cc b/proto/build/cpp/src/ipaaca.pb.cc
new file mode 100644
index 0000000..3364b9c
--- /dev/null
+++ b/proto/build/cpp/src/ipaaca.pb.cc
@@ -0,0 +1,3292 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "src/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* IULinkUpdate_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  IULinkUpdate_reflection_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_src_2fipaaca_2eproto() {
+  protobuf_AddDesc_src_2fipaaca_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "src/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));
+  IULinkUpdate_descriptor_ = file->message_type(7);
+  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_src_2fipaaca_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(
+    IULinkUpdate_descriptor_, &IULinkUpdate::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_src_2fipaaca_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 IULinkUpdate::default_instance_;
+  delete IULinkUpdate_reflection_;
+}
+
+void protobuf_AddDesc_src_2fipaaca_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\020src/ipaaca.proto\022\017ipaaca.protobuf\"\033\n\nI"
+    "ntMessage\022\r\n\005value\030\001 \002(\021\"(\n\007LinkSet\022\014\n\004t"
+    "ype\030\001 \002(\t\022\017\n\007targets\030\002 \003(\t\"<\n\013PayloadIte"
+    "m\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\014paylo"
+    "ad_type\030\004 \002(\t:\003MAP\022\022\n\nowner_name\030\005 \002(\t\022\030"
+    "\n\tcommitted\030\006 \002(\010:\005false\0229\n\013access_mode\030"
+    "\007 \002(\0162\036.ipaaca.protobuf.IU.AccessMode:\004P"
+    "USH\022\030\n\tread_only\030\010 \002(\010:\005false\022-\n\007payload"
+    "\030\t \003(\0132\034.ipaaca.protobuf.PayloadItem\022\'\n\005"
+    "links\030\n \003(\0132\030.ipaaca.protobuf.LinkSet\"/\n"
+    "\nAccessMode\022\010\n\004PUSH\020\000\022\n\n\006REMOTE\020\001\022\013\n\007MES"
+    "SAGE\020\002\"\247\001\n\017IUPayloadUpdate\022\013\n\003uid\030\001 \002(\t\022"
+    "\020\n\010revision\030\002 \002(\r\022/\n\tnew_items\030\003 \003(\0132\034.i"
+    "paaca.protobuf.PayloadItem\022\026\n\016keys_to_re"
+    "move\030\004 \003(\t\022\027\n\010is_delta\030\005 \002(\010:\005false\022\023\n\013w"
+    "riter_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\003uid\030\001 \002(\t\022\020\n\010revision\030\002 \002(\r\022\023\n\013writer"
+    "_name\030\003 \002(\t\"\273\001\n\014IULinkUpdate\022\013\n\003uid\030\001 \002("
+    "\t\022\020\n\010revision\030\002 \002(\r\022+\n\tnew_links\030\003 \003(\0132\030"
+    ".ipaaca.protobuf.LinkSet\0221\n\017links_to_rem"
+    "ove\030\004 \003(\0132\030.ipaaca.protobuf.LinkSet\022\027\n\010i"
+    "s_delta\030\005 \002(\010:\005false\022\023\n\013writer_name\030\006 \002("
+    "\t", 1001);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "src/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();
+  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();
+  IULinkUpdate::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_src_2fipaaca_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_src_2fipaaca_2eproto {
+  StaticDescriptorInitializer_src_2fipaaca_2eproto() {
+    protobuf_AddDesc_src_2fipaaca_2eproto();
+  }
+} static_descriptor_initializer_src_2fipaaca_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_src_2fipaaca_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_src_2fipaaca_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_src_2fipaaca_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_src_2fipaaca_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_src_2fipaaca_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_src_2fipaaca_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_src_2fipaaca_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 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_src_2fipaaca_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/proto/build/cpp/src/ipaaca.pb.h b/proto/build/cpp/src/ipaaca.pb.h
new file mode 100644
index 0000000..dccdd32
--- /dev/null
+++ b/proto/build/cpp/src/ipaaca.pb.h
@@ -0,0 +1,2470 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: src/ipaaca.proto
+
+#ifndef PROTOBUF_src_2fipaaca_2eproto__INCLUDED
+#define PROTOBUF_src_2fipaaca_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_src_2fipaaca_2eproto();
+void protobuf_AssignDesc_src_2fipaaca_2eproto();
+void protobuf_ShutdownFile_src_2fipaaca_2eproto();
+
+class IntMessage;
+class LinkSet;
+class PayloadItem;
+class IU;
+class IUPayloadUpdate;
+class IURetraction;
+class IUCommission;
+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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_2eproto();
+  
+  void InitAsDefaultInstance();
+  static IUCommission* 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_src_2fipaaca_2eproto();
+  friend void protobuf_AssignDesc_src_2fipaaca_2eproto();
+  friend void protobuf_ShutdownFile_src_2fipaaca_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;
+  }
+}
+
+// -------------------------------------------------------------------
+
+// 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_src_2fipaaca_2eproto__INCLUDED
diff --git a/proto/build/java/ipaaca/protobuf/Ipaaca.java b/proto/build/java/ipaaca/protobuf/Ipaaca.java
new file mode 100644
index 0000000..8583022
--- /dev/null
+++ b/proto/build/java/ipaaca/protobuf/Ipaaca.java
@@ -0,0 +1,6387 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: src/ipaaca.proto
+
+package ipaaca.protobuf;
+
+public final class Ipaaca {
+  private Ipaaca() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+  }
+  public interface IntMessageOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required sint32 value = 1;
+    boolean hasValue();
+    int getValue();
+  }
+  public static final class IntMessage extends
+      com.google.protobuf.GeneratedMessage
+      implements IntMessageOrBuilder {
+    // Use IntMessage.newBuilder() to construct.
+    private IntMessage(Builder builder) {
+      super(builder);
+    }
+    private IntMessage(boolean noInit) {}
+    
+    private static final IntMessage defaultInstance;
+    public static IntMessage getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IntMessage getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IntMessage_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IntMessage_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required sint32 value = 1;
+    public static final int VALUE_FIELD_NUMBER = 1;
+    private int value_;
+    public boolean hasValue() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public int getValue() {
+      return value_;
+    }
+    
+    private void initFields() {
+      value_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasValue()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeSInt32(1, value_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt32Size(1, value_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IntMessage parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.IntMessage prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.IntMessageOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IntMessage_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IntMessage_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.IntMessage.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        value_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.IntMessage.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IntMessage getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.IntMessage.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IntMessage build() {
+        ipaaca.protobuf.Ipaaca.IntMessage result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.IntMessage buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.IntMessage result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IntMessage buildPartial() {
+        ipaaca.protobuf.Ipaaca.IntMessage result = new ipaaca.protobuf.Ipaaca.IntMessage(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.value_ = value_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.IntMessage) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.IntMessage)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.IntMessage other) {
+        if (other == ipaaca.protobuf.Ipaaca.IntMessage.getDefaultInstance()) return this;
+        if (other.hasValue()) {
+          setValue(other.getValue());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasValue()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              value_ = input.readSInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required sint32 value = 1;
+      private int value_ ;
+      public boolean hasValue() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getValue() {
+        return value_;
+      }
+      public Builder setValue(int value) {
+        bitField0_ |= 0x00000001;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearValue() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        value_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.IntMessage)
+    }
+    
+    static {
+      defaultInstance = new IntMessage(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IntMessage)
+  }
+  
+  public interface LinkSetOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string type = 1;
+    boolean hasType();
+    String getType();
+    
+    // repeated string targets = 2;
+    java.util.List<String> getTargetsList();
+    int getTargetsCount();
+    String getTargets(int index);
+  }
+  public static final class LinkSet extends
+      com.google.protobuf.GeneratedMessage
+      implements LinkSetOrBuilder {
+    // Use LinkSet.newBuilder() to construct.
+    private LinkSet(Builder builder) {
+      super(builder);
+    }
+    private LinkSet(boolean noInit) {}
+    
+    private static final LinkSet defaultInstance;
+    public static LinkSet getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public LinkSet getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_LinkSet_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_LinkSet_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required string type = 1;
+    public static final int TYPE_FIELD_NUMBER = 1;
+    private java.lang.Object type_;
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getType() {
+      java.lang.Object ref = type_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          type_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getTypeBytes() {
+      java.lang.Object ref = type_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        type_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated string targets = 2;
+    public static final int TARGETS_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList targets_;
+    public java.util.List<String>
+        getTargetsList() {
+      return targets_;
+    }
+    public int getTargetsCount() {
+      return targets_.size();
+    }
+    public String getTargets(int index) {
+      return targets_.get(index);
+    }
+    
+    private void initFields() {
+      type_ = "";
+      targets_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasType()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getTypeBytes());
+      }
+      for (int i = 0; i < targets_.size(); i++) {
+        output.writeBytes(2, targets_.getByteString(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getTypeBytes());
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < targets_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(targets_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getTargetsList().size();
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.LinkSet parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.LinkSet prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.LinkSetOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_LinkSet_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_LinkSet_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.LinkSet.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        type_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        targets_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.LinkSet.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.LinkSet getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.LinkSet build() {
+        ipaaca.protobuf.Ipaaca.LinkSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.LinkSet buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.LinkSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.LinkSet buildPartial() {
+        ipaaca.protobuf.Ipaaca.LinkSet result = new ipaaca.protobuf.Ipaaca.LinkSet(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.type_ = type_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          targets_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              targets_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.targets_ = targets_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.LinkSet) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.LinkSet)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.LinkSet other) {
+        if (other == ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance()) return this;
+        if (other.hasType()) {
+          setType(other.getType());
+        }
+        if (!other.targets_.isEmpty()) {
+          if (targets_.isEmpty()) {
+            targets_ = other.targets_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureTargetsIsMutable();
+            targets_.addAll(other.targets_);
+          }
+          onChanged();
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasType()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              type_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              ensureTargetsIsMutable();
+              targets_.add(input.readBytes());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string type = 1;
+      private java.lang.Object type_ = "";
+      public boolean hasType() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getType() {
+        java.lang.Object ref = type_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          type_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setType(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearType() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        type_ = getDefaultInstance().getType();
+        onChanged();
+        return this;
+      }
+      void setType(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        type_ = value;
+        onChanged();
+      }
+      
+      // repeated string targets = 2;
+      private com.google.protobuf.LazyStringList targets_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureTargetsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          targets_ = new com.google.protobuf.LazyStringArrayList(targets_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<String>
+          getTargetsList() {
+        return java.util.Collections.unmodifiableList(targets_);
+      }
+      public int getTargetsCount() {
+        return targets_.size();
+      }
+      public String getTargets(int index) {
+        return targets_.get(index);
+      }
+      public Builder setTargets(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureTargetsIsMutable();
+        targets_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addTargets(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureTargetsIsMutable();
+        targets_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllTargets(
+          java.lang.Iterable<String> values) {
+        ensureTargetsIsMutable();
+        super.addAll(values, targets_);
+        onChanged();
+        return this;
+      }
+      public Builder clearTargets() {
+        targets_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+      void addTargets(com.google.protobuf.ByteString value) {
+        ensureTargetsIsMutable();
+        targets_.add(value);
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.LinkSet)
+    }
+    
+    static {
+      defaultInstance = new LinkSet(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.LinkSet)
+  }
+  
+  public interface PayloadItemOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string key = 1;
+    boolean hasKey();
+    String getKey();
+    
+    // required string value = 2;
+    boolean hasValue();
+    String getValue();
+    
+    // required string type = 3 [default = "str"];
+    boolean hasType();
+    String getType();
+  }
+  public static final class PayloadItem extends
+      com.google.protobuf.GeneratedMessage
+      implements PayloadItemOrBuilder {
+    // Use PayloadItem.newBuilder() to construct.
+    private PayloadItem(Builder builder) {
+      super(builder);
+    }
+    private PayloadItem(boolean noInit) {}
+    
+    private static final PayloadItem defaultInstance;
+    public static PayloadItem getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public PayloadItem getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_PayloadItem_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_PayloadItem_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required string key = 1;
+    public static final int KEY_FIELD_NUMBER = 1;
+    private java.lang.Object key_;
+    public boolean hasKey() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getKey() {
+      java.lang.Object ref = key_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          key_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getKeyBytes() {
+      java.lang.Object ref = key_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        key_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required string value = 2;
+    public static final int VALUE_FIELD_NUMBER = 2;
+    private java.lang.Object value_;
+    public boolean hasValue() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getValue() {
+      java.lang.Object ref = value_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          value_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getValueBytes() {
+      java.lang.Object ref = value_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        value_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required string type = 3 [default = "str"];
+    public static final int TYPE_FIELD_NUMBER = 3;
+    private java.lang.Object type_;
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public String getType() {
+      java.lang.Object ref = type_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          type_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getTypeBytes() {
+      java.lang.Object ref = type_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        type_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      key_ = "";
+      value_ = "";
+      type_ = "str";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasKey()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasValue()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasType()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getKeyBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getValueBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getTypeBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getKeyBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getValueBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getTypeBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.PayloadItem parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.PayloadItem prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_PayloadItem_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_PayloadItem_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.PayloadItem.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        key_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        value_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        type_ = "str";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.PayloadItem.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.PayloadItem getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.PayloadItem.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.PayloadItem build() {
+        ipaaca.protobuf.Ipaaca.PayloadItem result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.PayloadItem buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.PayloadItem result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.PayloadItem buildPartial() {
+        ipaaca.protobuf.Ipaaca.PayloadItem result = new ipaaca.protobuf.Ipaaca.PayloadItem(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.key_ = key_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.value_ = value_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.type_ = type_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.PayloadItem) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.PayloadItem)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.PayloadItem other) {
+        if (other == ipaaca.protobuf.Ipaaca.PayloadItem.getDefaultInstance()) return this;
+        if (other.hasKey()) {
+          setKey(other.getKey());
+        }
+        if (other.hasValue()) {
+          setValue(other.getValue());
+        }
+        if (other.hasType()) {
+          setType(other.getType());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasKey()) {
+          
+          return false;
+        }
+        if (!hasValue()) {
+          
+          return false;
+        }
+        if (!hasType()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              key_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
+              value_ = input.readBytes();
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000004;
+              type_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string key = 1;
+      private java.lang.Object key_ = "";
+      public boolean hasKey() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getKey() {
+        java.lang.Object ref = key_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          key_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setKey(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        key_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearKey() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        key_ = getDefaultInstance().getKey();
+        onChanged();
+        return this;
+      }
+      void setKey(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        key_ = value;
+        onChanged();
+      }
+      
+      // required string value = 2;
+      private java.lang.Object value_ = "";
+      public boolean hasValue() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public String getValue() {
+        java.lang.Object ref = value_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          value_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setValue(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearValue() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        value_ = getDefaultInstance().getValue();
+        onChanged();
+        return this;
+      }
+      void setValue(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        value_ = value;
+        onChanged();
+      }
+      
+      // required string type = 3 [default = "str"];
+      private java.lang.Object type_ = "str";
+      public boolean hasType() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public String getType() {
+        java.lang.Object ref = type_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          type_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setType(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearType() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        type_ = getDefaultInstance().getType();
+        onChanged();
+        return this;
+      }
+      void setType(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000004;
+        type_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.PayloadItem)
+    }
+    
+    static {
+      defaultInstance = new PayloadItem(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.PayloadItem)
+  }
+  
+  public interface IUOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string uid = 1;
+    boolean hasUid();
+    String getUid();
+    
+    // required uint32 revision = 2;
+    boolean hasRevision();
+    int getRevision();
+    
+    // required string category = 3 [default = "undef"];
+    boolean hasCategory();
+    String getCategory();
+    
+    // required string payload_type = 4 [default = "MAP"];
+    boolean hasPayloadType();
+    String getPayloadType();
+    
+    // required string owner_name = 5;
+    boolean hasOwnerName();
+    String getOwnerName();
+    
+    // required bool committed = 6 [default = false];
+    boolean hasCommitted();
+    boolean getCommitted();
+    
+    // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+    boolean hasAccessMode();
+    ipaaca.protobuf.Ipaaca.IU.AccessMode getAccessMode();
+    
+    // required bool read_only = 8 [default = false];
+    boolean hasReadOnly();
+    boolean getReadOnly();
+    
+    // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+    java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> 
+        getPayloadList();
+    ipaaca.protobuf.Ipaaca.PayloadItem getPayload(int index);
+    int getPayloadCount();
+    java.util.List<? extends ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+        getPayloadOrBuilderList();
+    ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder getPayloadOrBuilder(
+        int index);
+    
+    // repeated .ipaaca.protobuf.LinkSet links = 10;
+    java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> 
+        getLinksList();
+    ipaaca.protobuf.Ipaaca.LinkSet getLinks(int index);
+    int getLinksCount();
+    java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+        getLinksOrBuilderList();
+    ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getLinksOrBuilder(
+        int index);
+  }
+  public static final class IU extends
+      com.google.protobuf.GeneratedMessage
+      implements IUOrBuilder {
+    // Use IU.newBuilder() to construct.
+    private IU(Builder builder) {
+      super(builder);
+    }
+    private IU(boolean noInit) {}
+    
+    private static final IU defaultInstance;
+    public static IU getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IU getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IU_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IU_fieldAccessorTable;
+    }
+    
+    public enum AccessMode
+        implements com.google.protobuf.ProtocolMessageEnum {
+      PUSH(0, 0),
+      REMOTE(1, 1),
+      MESSAGE(2, 2),
+      ;
+      
+      public static final int PUSH_VALUE = 0;
+      public static final int REMOTE_VALUE = 1;
+      public static final int MESSAGE_VALUE = 2;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static AccessMode valueOf(int value) {
+        switch (value) {
+          case 0: return PUSH;
+          case 1: return REMOTE;
+          case 2: return MESSAGE;
+          default: return null;
+        }
+      }
+      
+      public static com.google.protobuf.Internal.EnumLiteMap<AccessMode>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<AccessMode>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<AccessMode>() {
+              public AccessMode findValueByNumber(int number) {
+                return AccessMode.valueOf(number);
+              }
+            };
+      
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.IU.getDescriptor().getEnumTypes().get(0);
+      }
+      
+      private static final AccessMode[] VALUES = {
+        PUSH, REMOTE, MESSAGE, 
+      };
+      
+      public static AccessMode valueOf(
+          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+        if (desc.getType() != getDescriptor()) {
+          throw new java.lang.IllegalArgumentException(
+            "EnumValueDescriptor is not for this type.");
+        }
+        return VALUES[desc.getIndex()];
+      }
+      
+      private final int index;
+      private final int value;
+      
+      private AccessMode(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:ipaaca.protobuf.IU.AccessMode)
+    }
+    
+    private int bitField0_;
+    // required string uid = 1;
+    public static final int UID_FIELD_NUMBER = 1;
+    private java.lang.Object uid_;
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          uid_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required uint32 revision = 2;
+    public static final int REVISION_FIELD_NUMBER = 2;
+    private int revision_;
+    public boolean hasRevision() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getRevision() {
+      return revision_;
+    }
+    
+    // required string category = 3 [default = "undef"];
+    public static final int CATEGORY_FIELD_NUMBER = 3;
+    private java.lang.Object category_;
+    public boolean hasCategory() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public String getCategory() {
+      java.lang.Object ref = category_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          category_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getCategoryBytes() {
+      java.lang.Object ref = category_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        category_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required string payload_type = 4 [default = "MAP"];
+    public static final int PAYLOAD_TYPE_FIELD_NUMBER = 4;
+    private java.lang.Object payloadType_;
+    public boolean hasPayloadType() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public String getPayloadType() {
+      java.lang.Object ref = payloadType_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          payloadType_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getPayloadTypeBytes() {
+      java.lang.Object ref = payloadType_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        payloadType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required string owner_name = 5;
+    public static final int OWNER_NAME_FIELD_NUMBER = 5;
+    private java.lang.Object ownerName_;
+    public boolean hasOwnerName() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public String getOwnerName() {
+      java.lang.Object ref = ownerName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          ownerName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getOwnerNameBytes() {
+      java.lang.Object ref = ownerName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        ownerName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required bool committed = 6 [default = false];
+    public static final int COMMITTED_FIELD_NUMBER = 6;
+    private boolean committed_;
+    public boolean hasCommitted() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public boolean getCommitted() {
+      return committed_;
+    }
+    
+    // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+    public static final int ACCESS_MODE_FIELD_NUMBER = 7;
+    private ipaaca.protobuf.Ipaaca.IU.AccessMode accessMode_;
+    public boolean hasAccessMode() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public ipaaca.protobuf.Ipaaca.IU.AccessMode getAccessMode() {
+      return accessMode_;
+    }
+    
+    // required bool read_only = 8 [default = false];
+    public static final int READ_ONLY_FIELD_NUMBER = 8;
+    private boolean readOnly_;
+    public boolean hasReadOnly() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public boolean getReadOnly() {
+      return readOnly_;
+    }
+    
+    // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+    public static final int PAYLOAD_FIELD_NUMBER = 9;
+    private java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> payload_;
+    public java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> getPayloadList() {
+      return payload_;
+    }
+    public java.util.List<? extends ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+        getPayloadOrBuilderList() {
+      return payload_;
+    }
+    public int getPayloadCount() {
+      return payload_.size();
+    }
+    public ipaaca.protobuf.Ipaaca.PayloadItem getPayload(int index) {
+      return payload_.get(index);
+    }
+    public ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder getPayloadOrBuilder(
+        int index) {
+      return payload_.get(index);
+    }
+    
+    // repeated .ipaaca.protobuf.LinkSet links = 10;
+    public static final int LINKS_FIELD_NUMBER = 10;
+    private java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> links_;
+    public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> getLinksList() {
+      return links_;
+    }
+    public java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+        getLinksOrBuilderList() {
+      return links_;
+    }
+    public int getLinksCount() {
+      return links_.size();
+    }
+    public ipaaca.protobuf.Ipaaca.LinkSet getLinks(int index) {
+      return links_.get(index);
+    }
+    public ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getLinksOrBuilder(
+        int index) {
+      return links_.get(index);
+    }
+    
+    private void initFields() {
+      uid_ = "";
+      revision_ = 0;
+      category_ = "undef";
+      payloadType_ = "MAP";
+      ownerName_ = "";
+      committed_ = false;
+      accessMode_ = ipaaca.protobuf.Ipaaca.IU.AccessMode.PUSH;
+      readOnly_ = false;
+      payload_ = java.util.Collections.emptyList();
+      links_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasUid()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRevision()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasCategory()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasPayloadType()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasOwnerName()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasCommitted()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasAccessMode()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasReadOnly()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      for (int i = 0; i < getPayloadCount(); i++) {
+        if (!getPayload(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getLinksCount(); i++) {
+        if (!getLinks(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeUInt32(2, revision_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getCategoryBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, getPayloadTypeBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(5, getOwnerNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBool(6, committed_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeEnum(7, accessMode_.getNumber());
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeBool(8, readOnly_);
+      }
+      for (int i = 0; i < payload_.size(); i++) {
+        output.writeMessage(9, payload_.get(i));
+      }
+      for (int i = 0; i < links_.size(); i++) {
+        output.writeMessage(10, links_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, revision_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getCategoryBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, getPayloadTypeBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(5, getOwnerNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(6, committed_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(7, accessMode_.getNumber());
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(8, readOnly_);
+      }
+      for (int i = 0; i < payload_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, payload_.get(i));
+      }
+      for (int i = 0; i < links_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, links_.get(i));
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IU parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.IU prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.IUOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IU_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IU_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.IU.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getPayloadFieldBuilder();
+          getLinksFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        uid_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        revision_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        category_ = "undef";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        payloadType_ = "MAP";
+        bitField0_ = (bitField0_ & ~0x00000008);
+        ownerName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        committed_ = false;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        accessMode_ = ipaaca.protobuf.Ipaaca.IU.AccessMode.PUSH;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        readOnly_ = false;
+        bitField0_ = (bitField0_ & ~0x00000080);
+        if (payloadBuilder_ == null) {
+          payload_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000100);
+        } else {
+          payloadBuilder_.clear();
+        }
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000200);
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.IU.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IU getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.IU.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IU build() {
+        ipaaca.protobuf.Ipaaca.IU result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.IU buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.IU result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IU buildPartial() {
+        ipaaca.protobuf.Ipaaca.IU result = new ipaaca.protobuf.Ipaaca.IU(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.revision_ = revision_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.category_ = category_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.payloadType_ = payloadType_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.ownerName_ = ownerName_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.committed_ = committed_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.accessMode_ = accessMode_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.readOnly_ = readOnly_;
+        if (payloadBuilder_ == null) {
+          if (((bitField0_ & 0x00000100) == 0x00000100)) {
+            payload_ = java.util.Collections.unmodifiableList(payload_);
+            bitField0_ = (bitField0_ & ~0x00000100);
+          }
+          result.payload_ = payload_;
+        } else {
+          result.payload_ = payloadBuilder_.build();
+        }
+        if (linksBuilder_ == null) {
+          if (((bitField0_ & 0x00000200) == 0x00000200)) {
+            links_ = java.util.Collections.unmodifiableList(links_);
+            bitField0_ = (bitField0_ & ~0x00000200);
+          }
+          result.links_ = links_;
+        } else {
+          result.links_ = linksBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.IU) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.IU)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.IU other) {
+        if (other == ipaaca.protobuf.Ipaaca.IU.getDefaultInstance()) return this;
+        if (other.hasUid()) {
+          setUid(other.getUid());
+        }
+        if (other.hasRevision()) {
+          setRevision(other.getRevision());
+        }
+        if (other.hasCategory()) {
+          setCategory(other.getCategory());
+        }
+        if (other.hasPayloadType()) {
+          setPayloadType(other.getPayloadType());
+        }
+        if (other.hasOwnerName()) {
+          setOwnerName(other.getOwnerName());
+        }
+        if (other.hasCommitted()) {
+          setCommitted(other.getCommitted());
+        }
+        if (other.hasAccessMode()) {
+          setAccessMode(other.getAccessMode());
+        }
+        if (other.hasReadOnly()) {
+          setReadOnly(other.getReadOnly());
+        }
+        if (payloadBuilder_ == null) {
+          if (!other.payload_.isEmpty()) {
+            if (payload_.isEmpty()) {
+              payload_ = other.payload_;
+              bitField0_ = (bitField0_ & ~0x00000100);
+            } else {
+              ensurePayloadIsMutable();
+              payload_.addAll(other.payload_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.payload_.isEmpty()) {
+            if (payloadBuilder_.isEmpty()) {
+              payloadBuilder_.dispose();
+              payloadBuilder_ = null;
+              payload_ = other.payload_;
+              bitField0_ = (bitField0_ & ~0x00000100);
+              payloadBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getPayloadFieldBuilder() : null;
+            } else {
+              payloadBuilder_.addAllMessages(other.payload_);
+            }
+          }
+        }
+        if (linksBuilder_ == null) {
+          if (!other.links_.isEmpty()) {
+            if (links_.isEmpty()) {
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000200);
+            } else {
+              ensureLinksIsMutable();
+              links_.addAll(other.links_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.links_.isEmpty()) {
+            if (linksBuilder_.isEmpty()) {
+              linksBuilder_.dispose();
+              linksBuilder_ = null;
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000200);
+              linksBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getLinksFieldBuilder() : null;
+            } else {
+              linksBuilder_.addAllMessages(other.links_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasUid()) {
+          
+          return false;
+        }
+        if (!hasRevision()) {
+          
+          return false;
+        }
+        if (!hasCategory()) {
+          
+          return false;
+        }
+        if (!hasPayloadType()) {
+          
+          return false;
+        }
+        if (!hasOwnerName()) {
+          
+          return false;
+        }
+        if (!hasCommitted()) {
+          
+          return false;
+        }
+        if (!hasAccessMode()) {
+          
+          return false;
+        }
+        if (!hasReadOnly()) {
+          
+          return false;
+        }
+        for (int i = 0; i < getPayloadCount(); i++) {
+          if (!getPayload(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getLinksCount(); i++) {
+          if (!getLinks(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              uid_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              revision_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000004;
+              category_ = input.readBytes();
+              break;
+            }
+            case 34: {
+              bitField0_ |= 0x00000008;
+              payloadType_ = input.readBytes();
+              break;
+            }
+            case 42: {
+              bitField0_ |= 0x00000010;
+              ownerName_ = input.readBytes();
+              break;
+            }
+            case 48: {
+              bitField0_ |= 0x00000020;
+              committed_ = input.readBool();
+              break;
+            }
+            case 56: {
+              int rawValue = input.readEnum();
+              ipaaca.protobuf.Ipaaca.IU.AccessMode value = ipaaca.protobuf.Ipaaca.IU.AccessMode.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(7, rawValue);
+              } else {
+                bitField0_ |= 0x00000040;
+                accessMode_ = value;
+              }
+              break;
+            }
+            case 64: {
+              bitField0_ |= 0x00000080;
+              readOnly_ = input.readBool();
+              break;
+            }
+            case 74: {
+              ipaaca.protobuf.Ipaaca.PayloadItem.Builder subBuilder = ipaaca.protobuf.Ipaaca.PayloadItem.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addPayload(subBuilder.buildPartial());
+              break;
+            }
+            case 82: {
+              ipaaca.protobuf.Ipaaca.LinkSet.Builder subBuilder = ipaaca.protobuf.Ipaaca.LinkSet.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addLinks(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string uid = 1;
+      private java.lang.Object uid_ = "";
+      public boolean hasUid() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setUid(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUid() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      void setUid(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+      }
+      
+      // required uint32 revision = 2;
+      private int revision_ ;
+      public boolean hasRevision() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getRevision() {
+        return revision_;
+      }
+      public Builder setRevision(int value) {
+        bitField0_ |= 0x00000002;
+        revision_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearRevision() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        revision_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // required string category = 3 [default = "undef"];
+      private java.lang.Object category_ = "undef";
+      public boolean hasCategory() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public String getCategory() {
+        java.lang.Object ref = category_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          category_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setCategory(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        category_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCategory() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        category_ = getDefaultInstance().getCategory();
+        onChanged();
+        return this;
+      }
+      void setCategory(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000004;
+        category_ = value;
+        onChanged();
+      }
+      
+      // required string payload_type = 4 [default = "MAP"];
+      private java.lang.Object payloadType_ = "MAP";
+      public boolean hasPayloadType() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public String getPayloadType() {
+        java.lang.Object ref = payloadType_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          payloadType_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setPayloadType(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        payloadType_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPayloadType() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        payloadType_ = getDefaultInstance().getPayloadType();
+        onChanged();
+        return this;
+      }
+      void setPayloadType(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000008;
+        payloadType_ = value;
+        onChanged();
+      }
+      
+      // required string owner_name = 5;
+      private java.lang.Object ownerName_ = "";
+      public boolean hasOwnerName() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public String getOwnerName() {
+        java.lang.Object ref = ownerName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          ownerName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setOwnerName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        ownerName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearOwnerName() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        ownerName_ = getDefaultInstance().getOwnerName();
+        onChanged();
+        return this;
+      }
+      void setOwnerName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000010;
+        ownerName_ = value;
+        onChanged();
+      }
+      
+      // required bool committed = 6 [default = false];
+      private boolean committed_ ;
+      public boolean hasCommitted() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public boolean getCommitted() {
+        return committed_;
+      }
+      public Builder setCommitted(boolean value) {
+        bitField0_ |= 0x00000020;
+        committed_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCommitted() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        committed_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // required .ipaaca.protobuf.IU.AccessMode access_mode = 7 [default = PUSH];
+      private ipaaca.protobuf.Ipaaca.IU.AccessMode accessMode_ = ipaaca.protobuf.Ipaaca.IU.AccessMode.PUSH;
+      public boolean hasAccessMode() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public ipaaca.protobuf.Ipaaca.IU.AccessMode getAccessMode() {
+        return accessMode_;
+      }
+      public Builder setAccessMode(ipaaca.protobuf.Ipaaca.IU.AccessMode value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000040;
+        accessMode_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearAccessMode() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        accessMode_ = ipaaca.protobuf.Ipaaca.IU.AccessMode.PUSH;
+        onChanged();
+        return this;
+      }
+      
+      // required bool read_only = 8 [default = false];
+      private boolean readOnly_ ;
+      public boolean hasReadOnly() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public boolean getReadOnly() {
+        return readOnly_;
+      }
+      public Builder setReadOnly(boolean value) {
+        bitField0_ |= 0x00000080;
+        readOnly_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearReadOnly() {
+        bitField0_ = (bitField0_ & ~0x00000080);
+        readOnly_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .ipaaca.protobuf.PayloadItem payload = 9;
+      private java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> payload_ =
+        java.util.Collections.emptyList();
+      private void ensurePayloadIsMutable() {
+        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
+          payload_ = new java.util.ArrayList<ipaaca.protobuf.Ipaaca.PayloadItem>(payload_);
+          bitField0_ |= 0x00000100;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.PayloadItem, ipaaca.protobuf.Ipaaca.PayloadItem.Builder, ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> payloadBuilder_;
+      
+      public java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> getPayloadList() {
+        if (payloadBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(payload_);
+        } else {
+          return payloadBuilder_.getMessageList();
+        }
+      }
+      public int getPayloadCount() {
+        if (payloadBuilder_ == null) {
+          return payload_.size();
+        } else {
+          return payloadBuilder_.getCount();
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem getPayload(int index) {
+        if (payloadBuilder_ == null) {
+          return payload_.get(index);
+        } else {
+          return payloadBuilder_.getMessage(index);
+        }
+      }
+      public Builder setPayload(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem value) {
+        if (payloadBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePayloadIsMutable();
+          payload_.set(index, value);
+          onChanged();
+        } else {
+          payloadBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setPayload(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem.Builder builderForValue) {
+        if (payloadBuilder_ == null) {
+          ensurePayloadIsMutable();
+          payload_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          payloadBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addPayload(ipaaca.protobuf.Ipaaca.PayloadItem value) {
+        if (payloadBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePayloadIsMutable();
+          payload_.add(value);
+          onChanged();
+        } else {
+          payloadBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addPayload(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem value) {
+        if (payloadBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePayloadIsMutable();
+          payload_.add(index, value);
+          onChanged();
+        } else {
+          payloadBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addPayload(
+          ipaaca.protobuf.Ipaaca.PayloadItem.Builder builderForValue) {
+        if (payloadBuilder_ == null) {
+          ensurePayloadIsMutable();
+          payload_.add(builderForValue.build());
+          onChanged();
+        } else {
+          payloadBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addPayload(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem.Builder builderForValue) {
+        if (payloadBuilder_ == null) {
+          ensurePayloadIsMutable();
+          payload_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          payloadBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllPayload(
+          java.lang.Iterable<? extends ipaaca.protobuf.Ipaaca.PayloadItem> values) {
+        if (payloadBuilder_ == null) {
+          ensurePayloadIsMutable();
+          super.addAll(values, payload_);
+          onChanged();
+        } else {
+          payloadBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearPayload() {
+        if (payloadBuilder_ == null) {
+          payload_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000100);
+          onChanged();
+        } else {
+          payloadBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removePayload(int index) {
+        if (payloadBuilder_ == null) {
+          ensurePayloadIsMutable();
+          payload_.remove(index);
+          onChanged();
+        } else {
+          payloadBuilder_.remove(index);
+        }
+        return this;
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem.Builder getPayloadBuilder(
+          int index) {
+        return getPayloadFieldBuilder().getBuilder(index);
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder getPayloadOrBuilder(
+          int index) {
+        if (payloadBuilder_ == null) {
+          return payload_.get(index);  } else {
+          return payloadBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+           getPayloadOrBuilderList() {
+        if (payloadBuilder_ != null) {
+          return payloadBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(payload_);
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem.Builder addPayloadBuilder() {
+        return getPayloadFieldBuilder().addBuilder(
+            ipaaca.protobuf.Ipaaca.PayloadItem.getDefaultInstance());
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem.Builder addPayloadBuilder(
+          int index) {
+        return getPayloadFieldBuilder().addBuilder(
+            index, ipaaca.protobuf.Ipaaca.PayloadItem.getDefaultInstance());
+      }
+      public java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem.Builder> 
+           getPayloadBuilderList() {
+        return getPayloadFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.PayloadItem, ipaaca.protobuf.Ipaaca.PayloadItem.Builder, ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+          getPayloadFieldBuilder() {
+        if (payloadBuilder_ == null) {
+          payloadBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              ipaaca.protobuf.Ipaaca.PayloadItem, ipaaca.protobuf.Ipaaca.PayloadItem.Builder, ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder>(
+                  payload_,
+                  ((bitField0_ & 0x00000100) == 0x00000100),
+                  getParentForChildren(),
+                  isClean());
+          payload_ = null;
+        }
+        return payloadBuilder_;
+      }
+      
+      // repeated .ipaaca.protobuf.LinkSet links = 10;
+      private java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> links_ =
+        java.util.Collections.emptyList();
+      private void ensureLinksIsMutable() {
+        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
+          links_ = new java.util.ArrayList<ipaaca.protobuf.Ipaaca.LinkSet>(links_);
+          bitField0_ |= 0x00000200;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> linksBuilder_;
+      
+      public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> getLinksList() {
+        if (linksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(links_);
+        } else {
+          return linksBuilder_.getMessageList();
+        }
+      }
+      public int getLinksCount() {
+        if (linksBuilder_ == null) {
+          return links_.size();
+        } else {
+          return linksBuilder_.getCount();
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet getLinks(int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);
+        } else {
+          return linksBuilder_.getMessage(index);
+        }
+      }
+      public Builder setLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.set(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addLinks(ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addLinks(
+          ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllLinks(
+          java.lang.Iterable<? extends ipaaca.protobuf.Ipaaca.LinkSet> values) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          super.addAll(values, links_);
+          onChanged();
+        } else {
+          linksBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearLinks() {
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000200);
+          onChanged();
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
+          onChanged();
+        } else {
+          linksBuilder_.remove(index);
+        }
+        return this;
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder getLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().getBuilder(index);
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getLinksOrBuilder(
+          int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);  } else {
+          return linksBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+           getLinksOrBuilderList() {
+        if (linksBuilder_ != null) {
+          return linksBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(links_);
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder addLinksBuilder() {
+        return getLinksFieldBuilder().addBuilder(
+            ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance());
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder addLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().addBuilder(
+            index, ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance());
+      }
+      public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet.Builder> 
+           getLinksBuilderList() {
+        return getLinksFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+          getLinksFieldBuilder() {
+        if (linksBuilder_ == null) {
+          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder>(
+                  links_,
+                  ((bitField0_ & 0x00000200) == 0x00000200),
+                  getParentForChildren(),
+                  isClean());
+          links_ = null;
+        }
+        return linksBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.IU)
+    }
+    
+    static {
+      defaultInstance = new IU(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IU)
+  }
+  
+  public interface IUPayloadUpdateOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string uid = 1;
+    boolean hasUid();
+    String getUid();
+    
+    // required uint32 revision = 2;
+    boolean hasRevision();
+    int getRevision();
+    
+    // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+    java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> 
+        getNewItemsList();
+    ipaaca.protobuf.Ipaaca.PayloadItem getNewItems(int index);
+    int getNewItemsCount();
+    java.util.List<? extends ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+        getNewItemsOrBuilderList();
+    ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder getNewItemsOrBuilder(
+        int index);
+    
+    // repeated string keys_to_remove = 4;
+    java.util.List<String> getKeysToRemoveList();
+    int getKeysToRemoveCount();
+    String getKeysToRemove(int index);
+    
+    // required bool is_delta = 5 [default = false];
+    boolean hasIsDelta();
+    boolean getIsDelta();
+    
+    // required string writer_name = 6;
+    boolean hasWriterName();
+    String getWriterName();
+  }
+  public static final class IUPayloadUpdate extends
+      com.google.protobuf.GeneratedMessage
+      implements IUPayloadUpdateOrBuilder {
+    // Use IUPayloadUpdate.newBuilder() to construct.
+    private IUPayloadUpdate(Builder builder) {
+      super(builder);
+    }
+    private IUPayloadUpdate(boolean noInit) {}
+    
+    private static final IUPayloadUpdate defaultInstance;
+    public static IUPayloadUpdate getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IUPayloadUpdate getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUPayloadUpdate_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUPayloadUpdate_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required string uid = 1;
+    public static final int UID_FIELD_NUMBER = 1;
+    private java.lang.Object uid_;
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          uid_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required uint32 revision = 2;
+    public static final int REVISION_FIELD_NUMBER = 2;
+    private int revision_;
+    public boolean hasRevision() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getRevision() {
+      return revision_;
+    }
+    
+    // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+    public static final int NEW_ITEMS_FIELD_NUMBER = 3;
+    private java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> newItems_;
+    public java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> getNewItemsList() {
+      return newItems_;
+    }
+    public java.util.List<? extends ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+        getNewItemsOrBuilderList() {
+      return newItems_;
+    }
+    public int getNewItemsCount() {
+      return newItems_.size();
+    }
+    public ipaaca.protobuf.Ipaaca.PayloadItem getNewItems(int index) {
+      return newItems_.get(index);
+    }
+    public ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder getNewItemsOrBuilder(
+        int index) {
+      return newItems_.get(index);
+    }
+    
+    // repeated string keys_to_remove = 4;
+    public static final int KEYS_TO_REMOVE_FIELD_NUMBER = 4;
+    private com.google.protobuf.LazyStringList keysToRemove_;
+    public java.util.List<String>
+        getKeysToRemoveList() {
+      return keysToRemove_;
+    }
+    public int getKeysToRemoveCount() {
+      return keysToRemove_.size();
+    }
+    public String getKeysToRemove(int index) {
+      return keysToRemove_.get(index);
+    }
+    
+    // required bool is_delta = 5 [default = false];
+    public static final int IS_DELTA_FIELD_NUMBER = 5;
+    private boolean isDelta_;
+    public boolean hasIsDelta() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public boolean getIsDelta() {
+      return isDelta_;
+    }
+    
+    // required string writer_name = 6;
+    public static final int WRITER_NAME_FIELD_NUMBER = 6;
+    private java.lang.Object writerName_;
+    public boolean hasWriterName() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public String getWriterName() {
+      java.lang.Object ref = writerName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          writerName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getWriterNameBytes() {
+      java.lang.Object ref = writerName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        writerName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      uid_ = "";
+      revision_ = 0;
+      newItems_ = java.util.Collections.emptyList();
+      keysToRemove_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      isDelta_ = false;
+      writerName_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasUid()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRevision()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasIsDelta()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasWriterName()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      for (int i = 0; i < getNewItemsCount(); i++) {
+        if (!getNewItems(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeUInt32(2, revision_);
+      }
+      for (int i = 0; i < newItems_.size(); i++) {
+        output.writeMessage(3, newItems_.get(i));
+      }
+      for (int i = 0; i < keysToRemove_.size(); i++) {
+        output.writeBytes(4, keysToRemove_.getByteString(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(5, isDelta_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(6, getWriterNameBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, revision_);
+      }
+      for (int i = 0; i < newItems_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, newItems_.get(i));
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < keysToRemove_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(keysToRemove_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getKeysToRemoveList().size();
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, isDelta_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, getWriterNameBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUPayloadUpdate parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.IUPayloadUpdate prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.IUPayloadUpdateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUPayloadUpdate_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUPayloadUpdate_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.IUPayloadUpdate.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getNewItemsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        uid_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        revision_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (newItemsBuilder_ == null) {
+          newItems_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          newItemsBuilder_.clear();
+        }
+        keysToRemove_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        isDelta_ = false;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        writerName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.IUPayloadUpdate.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IUPayloadUpdate getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.IUPayloadUpdate.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IUPayloadUpdate build() {
+        ipaaca.protobuf.Ipaaca.IUPayloadUpdate result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.IUPayloadUpdate buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.IUPayloadUpdate result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IUPayloadUpdate buildPartial() {
+        ipaaca.protobuf.Ipaaca.IUPayloadUpdate result = new ipaaca.protobuf.Ipaaca.IUPayloadUpdate(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.revision_ = revision_;
+        if (newItemsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004)) {
+            newItems_ = java.util.Collections.unmodifiableList(newItems_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.newItems_ = newItems_;
+        } else {
+          result.newItems_ = newItemsBuilder_.build();
+        }
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          keysToRemove_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              keysToRemove_);
+          bitField0_ = (bitField0_ & ~0x00000008);
+        }
+        result.keysToRemove_ = keysToRemove_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.isDelta_ = isDelta_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.writerName_ = writerName_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.IUPayloadUpdate) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.IUPayloadUpdate)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.IUPayloadUpdate other) {
+        if (other == ipaaca.protobuf.Ipaaca.IUPayloadUpdate.getDefaultInstance()) return this;
+        if (other.hasUid()) {
+          setUid(other.getUid());
+        }
+        if (other.hasRevision()) {
+          setRevision(other.getRevision());
+        }
+        if (newItemsBuilder_ == null) {
+          if (!other.newItems_.isEmpty()) {
+            if (newItems_.isEmpty()) {
+              newItems_ = other.newItems_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureNewItemsIsMutable();
+              newItems_.addAll(other.newItems_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.newItems_.isEmpty()) {
+            if (newItemsBuilder_.isEmpty()) {
+              newItemsBuilder_.dispose();
+              newItemsBuilder_ = null;
+              newItems_ = other.newItems_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              newItemsBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getNewItemsFieldBuilder() : null;
+            } else {
+              newItemsBuilder_.addAllMessages(other.newItems_);
+            }
+          }
+        }
+        if (!other.keysToRemove_.isEmpty()) {
+          if (keysToRemove_.isEmpty()) {
+            keysToRemove_ = other.keysToRemove_;
+            bitField0_ = (bitField0_ & ~0x00000008);
+          } else {
+            ensureKeysToRemoveIsMutable();
+            keysToRemove_.addAll(other.keysToRemove_);
+          }
+          onChanged();
+        }
+        if (other.hasIsDelta()) {
+          setIsDelta(other.getIsDelta());
+        }
+        if (other.hasWriterName()) {
+          setWriterName(other.getWriterName());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasUid()) {
+          
+          return false;
+        }
+        if (!hasRevision()) {
+          
+          return false;
+        }
+        if (!hasIsDelta()) {
+          
+          return false;
+        }
+        if (!hasWriterName()) {
+          
+          return false;
+        }
+        for (int i = 0; i < getNewItemsCount(); i++) {
+          if (!getNewItems(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              uid_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              revision_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              ipaaca.protobuf.Ipaaca.PayloadItem.Builder subBuilder = ipaaca.protobuf.Ipaaca.PayloadItem.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addNewItems(subBuilder.buildPartial());
+              break;
+            }
+            case 34: {
+              ensureKeysToRemoveIsMutable();
+              keysToRemove_.add(input.readBytes());
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000010;
+              isDelta_ = input.readBool();
+              break;
+            }
+            case 50: {
+              bitField0_ |= 0x00000020;
+              writerName_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string uid = 1;
+      private java.lang.Object uid_ = "";
+      public boolean hasUid() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setUid(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUid() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      void setUid(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+      }
+      
+      // required uint32 revision = 2;
+      private int revision_ ;
+      public boolean hasRevision() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getRevision() {
+        return revision_;
+      }
+      public Builder setRevision(int value) {
+        bitField0_ |= 0x00000002;
+        revision_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearRevision() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        revision_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .ipaaca.protobuf.PayloadItem new_items = 3;
+      private java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> newItems_ =
+        java.util.Collections.emptyList();
+      private void ensureNewItemsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          newItems_ = new java.util.ArrayList<ipaaca.protobuf.Ipaaca.PayloadItem>(newItems_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.PayloadItem, ipaaca.protobuf.Ipaaca.PayloadItem.Builder, ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> newItemsBuilder_;
+      
+      public java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem> getNewItemsList() {
+        if (newItemsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(newItems_);
+        } else {
+          return newItemsBuilder_.getMessageList();
+        }
+      }
+      public int getNewItemsCount() {
+        if (newItemsBuilder_ == null) {
+          return newItems_.size();
+        } else {
+          return newItemsBuilder_.getCount();
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem getNewItems(int index) {
+        if (newItemsBuilder_ == null) {
+          return newItems_.get(index);
+        } else {
+          return newItemsBuilder_.getMessage(index);
+        }
+      }
+      public Builder setNewItems(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem value) {
+        if (newItemsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNewItemsIsMutable();
+          newItems_.set(index, value);
+          onChanged();
+        } else {
+          newItemsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setNewItems(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem.Builder builderForValue) {
+        if (newItemsBuilder_ == null) {
+          ensureNewItemsIsMutable();
+          newItems_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          newItemsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addNewItems(ipaaca.protobuf.Ipaaca.PayloadItem value) {
+        if (newItemsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNewItemsIsMutable();
+          newItems_.add(value);
+          onChanged();
+        } else {
+          newItemsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addNewItems(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem value) {
+        if (newItemsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNewItemsIsMutable();
+          newItems_.add(index, value);
+          onChanged();
+        } else {
+          newItemsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addNewItems(
+          ipaaca.protobuf.Ipaaca.PayloadItem.Builder builderForValue) {
+        if (newItemsBuilder_ == null) {
+          ensureNewItemsIsMutable();
+          newItems_.add(builderForValue.build());
+          onChanged();
+        } else {
+          newItemsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addNewItems(
+          int index, ipaaca.protobuf.Ipaaca.PayloadItem.Builder builderForValue) {
+        if (newItemsBuilder_ == null) {
+          ensureNewItemsIsMutable();
+          newItems_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          newItemsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllNewItems(
+          java.lang.Iterable<? extends ipaaca.protobuf.Ipaaca.PayloadItem> values) {
+        if (newItemsBuilder_ == null) {
+          ensureNewItemsIsMutable();
+          super.addAll(values, newItems_);
+          onChanged();
+        } else {
+          newItemsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearNewItems() {
+        if (newItemsBuilder_ == null) {
+          newItems_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          newItemsBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeNewItems(int index) {
+        if (newItemsBuilder_ == null) {
+          ensureNewItemsIsMutable();
+          newItems_.remove(index);
+          onChanged();
+        } else {
+          newItemsBuilder_.remove(index);
+        }
+        return this;
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem.Builder getNewItemsBuilder(
+          int index) {
+        return getNewItemsFieldBuilder().getBuilder(index);
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder getNewItemsOrBuilder(
+          int index) {
+        if (newItemsBuilder_ == null) {
+          return newItems_.get(index);  } else {
+          return newItemsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+           getNewItemsOrBuilderList() {
+        if (newItemsBuilder_ != null) {
+          return newItemsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(newItems_);
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem.Builder addNewItemsBuilder() {
+        return getNewItemsFieldBuilder().addBuilder(
+            ipaaca.protobuf.Ipaaca.PayloadItem.getDefaultInstance());
+      }
+      public ipaaca.protobuf.Ipaaca.PayloadItem.Builder addNewItemsBuilder(
+          int index) {
+        return getNewItemsFieldBuilder().addBuilder(
+            index, ipaaca.protobuf.Ipaaca.PayloadItem.getDefaultInstance());
+      }
+      public java.util.List<ipaaca.protobuf.Ipaaca.PayloadItem.Builder> 
+           getNewItemsBuilderList() {
+        return getNewItemsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.PayloadItem, ipaaca.protobuf.Ipaaca.PayloadItem.Builder, ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder> 
+          getNewItemsFieldBuilder() {
+        if (newItemsBuilder_ == null) {
+          newItemsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              ipaaca.protobuf.Ipaaca.PayloadItem, ipaaca.protobuf.Ipaaca.PayloadItem.Builder, ipaaca.protobuf.Ipaaca.PayloadItemOrBuilder>(
+                  newItems_,
+                  ((bitField0_ & 0x00000004) == 0x00000004),
+                  getParentForChildren(),
+                  isClean());
+          newItems_ = null;
+        }
+        return newItemsBuilder_;
+      }
+      
+      // repeated string keys_to_remove = 4;
+      private com.google.protobuf.LazyStringList keysToRemove_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureKeysToRemoveIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          keysToRemove_ = new com.google.protobuf.LazyStringArrayList(keysToRemove_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      public java.util.List<String>
+          getKeysToRemoveList() {
+        return java.util.Collections.unmodifiableList(keysToRemove_);
+      }
+      public int getKeysToRemoveCount() {
+        return keysToRemove_.size();
+      }
+      public String getKeysToRemove(int index) {
+        return keysToRemove_.get(index);
+      }
+      public Builder setKeysToRemove(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureKeysToRemoveIsMutable();
+        keysToRemove_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addKeysToRemove(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureKeysToRemoveIsMutable();
+        keysToRemove_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllKeysToRemove(
+          java.lang.Iterable<String> values) {
+        ensureKeysToRemoveIsMutable();
+        super.addAll(values, keysToRemove_);
+        onChanged();
+        return this;
+      }
+      public Builder clearKeysToRemove() {
+        keysToRemove_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        onChanged();
+        return this;
+      }
+      void addKeysToRemove(com.google.protobuf.ByteString value) {
+        ensureKeysToRemoveIsMutable();
+        keysToRemove_.add(value);
+        onChanged();
+      }
+      
+      // required bool is_delta = 5 [default = false];
+      private boolean isDelta_ ;
+      public boolean hasIsDelta() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public boolean getIsDelta() {
+        return isDelta_;
+      }
+      public Builder setIsDelta(boolean value) {
+        bitField0_ |= 0x00000010;
+        isDelta_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIsDelta() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        isDelta_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // required string writer_name = 6;
+      private java.lang.Object writerName_ = "";
+      public boolean hasWriterName() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public String getWriterName() {
+        java.lang.Object ref = writerName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          writerName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setWriterName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        writerName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearWriterName() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        writerName_ = getDefaultInstance().getWriterName();
+        onChanged();
+        return this;
+      }
+      void setWriterName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000020;
+        writerName_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.IUPayloadUpdate)
+    }
+    
+    static {
+      defaultInstance = new IUPayloadUpdate(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUPayloadUpdate)
+  }
+  
+  public interface IURetractionOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string uid = 1;
+    boolean hasUid();
+    String getUid();
+    
+    // required uint32 revision = 2;
+    boolean hasRevision();
+    int getRevision();
+  }
+  public static final class IURetraction extends
+      com.google.protobuf.GeneratedMessage
+      implements IURetractionOrBuilder {
+    // Use IURetraction.newBuilder() to construct.
+    private IURetraction(Builder builder) {
+      super(builder);
+    }
+    private IURetraction(boolean noInit) {}
+    
+    private static final IURetraction defaultInstance;
+    public static IURetraction getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IURetraction getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IURetraction_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IURetraction_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required string uid = 1;
+    public static final int UID_FIELD_NUMBER = 1;
+    private java.lang.Object uid_;
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          uid_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required uint32 revision = 2;
+    public static final int REVISION_FIELD_NUMBER = 2;
+    private int revision_;
+    public boolean hasRevision() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getRevision() {
+      return revision_;
+    }
+    
+    private void initFields() {
+      uid_ = "";
+      revision_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasUid()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRevision()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeUInt32(2, revision_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, revision_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IURetraction parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.IURetraction prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.IURetractionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IURetraction_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IURetraction_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.IURetraction.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        uid_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        revision_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.IURetraction.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IURetraction getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.IURetraction.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IURetraction build() {
+        ipaaca.protobuf.Ipaaca.IURetraction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.IURetraction buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.IURetraction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IURetraction buildPartial() {
+        ipaaca.protobuf.Ipaaca.IURetraction result = new ipaaca.protobuf.Ipaaca.IURetraction(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.revision_ = revision_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.IURetraction) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.IURetraction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.IURetraction other) {
+        if (other == ipaaca.protobuf.Ipaaca.IURetraction.getDefaultInstance()) return this;
+        if (other.hasUid()) {
+          setUid(other.getUid());
+        }
+        if (other.hasRevision()) {
+          setRevision(other.getRevision());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasUid()) {
+          
+          return false;
+        }
+        if (!hasRevision()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              uid_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              revision_ = input.readUInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string uid = 1;
+      private java.lang.Object uid_ = "";
+      public boolean hasUid() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setUid(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUid() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      void setUid(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+      }
+      
+      // required uint32 revision = 2;
+      private int revision_ ;
+      public boolean hasRevision() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getRevision() {
+        return revision_;
+      }
+      public Builder setRevision(int value) {
+        bitField0_ |= 0x00000002;
+        revision_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearRevision() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        revision_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.IURetraction)
+    }
+    
+    static {
+      defaultInstance = new IURetraction(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IURetraction)
+  }
+  
+  public interface IUCommissionOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string uid = 1;
+    boolean hasUid();
+    String getUid();
+    
+    // required uint32 revision = 2;
+    boolean hasRevision();
+    int getRevision();
+    
+    // required string writer_name = 3;
+    boolean hasWriterName();
+    String getWriterName();
+  }
+  public static final class IUCommission extends
+      com.google.protobuf.GeneratedMessage
+      implements IUCommissionOrBuilder {
+    // Use IUCommission.newBuilder() to construct.
+    private IUCommission(Builder builder) {
+      super(builder);
+    }
+    private IUCommission(boolean noInit) {}
+    
+    private static final IUCommission defaultInstance;
+    public static IUCommission getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IUCommission getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUCommission_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUCommission_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required string uid = 1;
+    public static final int UID_FIELD_NUMBER = 1;
+    private java.lang.Object uid_;
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          uid_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required uint32 revision = 2;
+    public static final int REVISION_FIELD_NUMBER = 2;
+    private int revision_;
+    public boolean hasRevision() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getRevision() {
+      return revision_;
+    }
+    
+    // required string writer_name = 3;
+    public static final int WRITER_NAME_FIELD_NUMBER = 3;
+    private java.lang.Object writerName_;
+    public boolean hasWriterName() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public String getWriterName() {
+      java.lang.Object ref = writerName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          writerName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getWriterNameBytes() {
+      java.lang.Object ref = writerName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        writerName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      uid_ = "";
+      revision_ = 0;
+      writerName_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasUid()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRevision()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasWriterName()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeUInt32(2, revision_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getWriterNameBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, revision_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getWriterNameBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IUCommission parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.IUCommission prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.IUCommissionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUCommission_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IUCommission_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.IUCommission.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        uid_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        revision_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        writerName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.IUCommission.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IUCommission getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.IUCommission.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IUCommission build() {
+        ipaaca.protobuf.Ipaaca.IUCommission result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.IUCommission buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.IUCommission result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IUCommission buildPartial() {
+        ipaaca.protobuf.Ipaaca.IUCommission result = new ipaaca.protobuf.Ipaaca.IUCommission(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.revision_ = revision_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.writerName_ = writerName_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.IUCommission) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.IUCommission)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.IUCommission other) {
+        if (other == ipaaca.protobuf.Ipaaca.IUCommission.getDefaultInstance()) return this;
+        if (other.hasUid()) {
+          setUid(other.getUid());
+        }
+        if (other.hasRevision()) {
+          setRevision(other.getRevision());
+        }
+        if (other.hasWriterName()) {
+          setWriterName(other.getWriterName());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasUid()) {
+          
+          return false;
+        }
+        if (!hasRevision()) {
+          
+          return false;
+        }
+        if (!hasWriterName()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              uid_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              revision_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000004;
+              writerName_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string uid = 1;
+      private java.lang.Object uid_ = "";
+      public boolean hasUid() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setUid(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUid() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      void setUid(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+      }
+      
+      // required uint32 revision = 2;
+      private int revision_ ;
+      public boolean hasRevision() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getRevision() {
+        return revision_;
+      }
+      public Builder setRevision(int value) {
+        bitField0_ |= 0x00000002;
+        revision_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearRevision() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        revision_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // required string writer_name = 3;
+      private java.lang.Object writerName_ = "";
+      public boolean hasWriterName() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public String getWriterName() {
+        java.lang.Object ref = writerName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          writerName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setWriterName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        writerName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearWriterName() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        writerName_ = getDefaultInstance().getWriterName();
+        onChanged();
+        return this;
+      }
+      void setWriterName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000004;
+        writerName_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.IUCommission)
+    }
+    
+    static {
+      defaultInstance = new IUCommission(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUCommission)
+  }
+  
+  public interface IULinkUpdateOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // required string uid = 1;
+    boolean hasUid();
+    String getUid();
+    
+    // required uint32 revision = 2;
+    boolean hasRevision();
+    int getRevision();
+    
+    // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+    java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> 
+        getNewLinksList();
+    ipaaca.protobuf.Ipaaca.LinkSet getNewLinks(int index);
+    int getNewLinksCount();
+    java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+        getNewLinksOrBuilderList();
+    ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getNewLinksOrBuilder(
+        int index);
+    
+    // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+    java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> 
+        getLinksToRemoveList();
+    ipaaca.protobuf.Ipaaca.LinkSet getLinksToRemove(int index);
+    int getLinksToRemoveCount();
+    java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+        getLinksToRemoveOrBuilderList();
+    ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getLinksToRemoveOrBuilder(
+        int index);
+    
+    // required bool is_delta = 5 [default = false];
+    boolean hasIsDelta();
+    boolean getIsDelta();
+    
+    // required string writer_name = 6;
+    boolean hasWriterName();
+    String getWriterName();
+  }
+  public static final class IULinkUpdate extends
+      com.google.protobuf.GeneratedMessage
+      implements IULinkUpdateOrBuilder {
+    // Use IULinkUpdate.newBuilder() to construct.
+    private IULinkUpdate(Builder builder) {
+      super(builder);
+    }
+    private IULinkUpdate(boolean noInit) {}
+    
+    private static final IULinkUpdate defaultInstance;
+    public static IULinkUpdate getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IULinkUpdate getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IULinkUpdate_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IULinkUpdate_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // required string uid = 1;
+    public static final int UID_FIELD_NUMBER = 1;
+    private java.lang.Object uid_;
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          uid_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // required uint32 revision = 2;
+    public static final int REVISION_FIELD_NUMBER = 2;
+    private int revision_;
+    public boolean hasRevision() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getRevision() {
+      return revision_;
+    }
+    
+    // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+    public static final int NEW_LINKS_FIELD_NUMBER = 3;
+    private java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> newLinks_;
+    public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> getNewLinksList() {
+      return newLinks_;
+    }
+    public java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+        getNewLinksOrBuilderList() {
+      return newLinks_;
+    }
+    public int getNewLinksCount() {
+      return newLinks_.size();
+    }
+    public ipaaca.protobuf.Ipaaca.LinkSet getNewLinks(int index) {
+      return newLinks_.get(index);
+    }
+    public ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getNewLinksOrBuilder(
+        int index) {
+      return newLinks_.get(index);
+    }
+    
+    // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+    public static final int LINKS_TO_REMOVE_FIELD_NUMBER = 4;
+    private java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> linksToRemove_;
+    public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> getLinksToRemoveList() {
+      return linksToRemove_;
+    }
+    public java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+        getLinksToRemoveOrBuilderList() {
+      return linksToRemove_;
+    }
+    public int getLinksToRemoveCount() {
+      return linksToRemove_.size();
+    }
+    public ipaaca.protobuf.Ipaaca.LinkSet getLinksToRemove(int index) {
+      return linksToRemove_.get(index);
+    }
+    public ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getLinksToRemoveOrBuilder(
+        int index) {
+      return linksToRemove_.get(index);
+    }
+    
+    // required bool is_delta = 5 [default = false];
+    public static final int IS_DELTA_FIELD_NUMBER = 5;
+    private boolean isDelta_;
+    public boolean hasIsDelta() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public boolean getIsDelta() {
+      return isDelta_;
+    }
+    
+    // required string writer_name = 6;
+    public static final int WRITER_NAME_FIELD_NUMBER = 6;
+    private java.lang.Object writerName_;
+    public boolean hasWriterName() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public String getWriterName() {
+      java.lang.Object ref = writerName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          writerName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getWriterNameBytes() {
+      java.lang.Object ref = writerName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        writerName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      uid_ = "";
+      revision_ = 0;
+      newLinks_ = java.util.Collections.emptyList();
+      linksToRemove_ = java.util.Collections.emptyList();
+      isDelta_ = false;
+      writerName_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasUid()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRevision()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasIsDelta()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasWriterName()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      for (int i = 0; i < getNewLinksCount(); i++) {
+        if (!getNewLinks(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getLinksToRemoveCount(); i++) {
+        if (!getLinksToRemove(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeUInt32(2, revision_);
+      }
+      for (int i = 0; i < newLinks_.size(); i++) {
+        output.writeMessage(3, newLinks_.get(i));
+      }
+      for (int i = 0; i < linksToRemove_.size(); i++) {
+        output.writeMessage(4, linksToRemove_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(5, isDelta_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(6, getWriterNameBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getUidBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, revision_);
+      }
+      for (int i = 0; i < newLinks_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, newLinks_.get(i));
+      }
+      for (int i = 0; i < linksToRemove_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, linksToRemove_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, isDelta_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, getWriterNameBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static ipaaca.protobuf.Ipaaca.IULinkUpdate parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(ipaaca.protobuf.Ipaaca.IULinkUpdate prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements ipaaca.protobuf.Ipaaca.IULinkUpdateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IULinkUpdate_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return ipaaca.protobuf.Ipaaca.internal_static_ipaaca_protobuf_IULinkUpdate_fieldAccessorTable;
+      }
+      
+      // Construct using ipaaca.protobuf.Ipaaca.IULinkUpdate.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getNewLinksFieldBuilder();
+          getLinksToRemoveFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        uid_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        revision_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (newLinksBuilder_ == null) {
+          newLinks_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          newLinksBuilder_.clear();
+        }
+        if (linksToRemoveBuilder_ == null) {
+          linksToRemove_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          linksToRemoveBuilder_.clear();
+        }
+        isDelta_ = false;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        writerName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return ipaaca.protobuf.Ipaaca.IULinkUpdate.getDescriptor();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IULinkUpdate getDefaultInstanceForType() {
+        return ipaaca.protobuf.Ipaaca.IULinkUpdate.getDefaultInstance();
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IULinkUpdate build() {
+        ipaaca.protobuf.Ipaaca.IULinkUpdate result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private ipaaca.protobuf.Ipaaca.IULinkUpdate buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        ipaaca.protobuf.Ipaaca.IULinkUpdate result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public ipaaca.protobuf.Ipaaca.IULinkUpdate buildPartial() {
+        ipaaca.protobuf.Ipaaca.IULinkUpdate result = new ipaaca.protobuf.Ipaaca.IULinkUpdate(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.revision_ = revision_;
+        if (newLinksBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004)) {
+            newLinks_ = java.util.Collections.unmodifiableList(newLinks_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.newLinks_ = newLinks_;
+        } else {
+          result.newLinks_ = newLinksBuilder_.build();
+        }
+        if (linksToRemoveBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008)) {
+            linksToRemove_ = java.util.Collections.unmodifiableList(linksToRemove_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.linksToRemove_ = linksToRemove_;
+        } else {
+          result.linksToRemove_ = linksToRemoveBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.isDelta_ = isDelta_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.writerName_ = writerName_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof ipaaca.protobuf.Ipaaca.IULinkUpdate) {
+          return mergeFrom((ipaaca.protobuf.Ipaaca.IULinkUpdate)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(ipaaca.protobuf.Ipaaca.IULinkUpdate other) {
+        if (other == ipaaca.protobuf.Ipaaca.IULinkUpdate.getDefaultInstance()) return this;
+        if (other.hasUid()) {
+          setUid(other.getUid());
+        }
+        if (other.hasRevision()) {
+          setRevision(other.getRevision());
+        }
+        if (newLinksBuilder_ == null) {
+          if (!other.newLinks_.isEmpty()) {
+            if (newLinks_.isEmpty()) {
+              newLinks_ = other.newLinks_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureNewLinksIsMutable();
+              newLinks_.addAll(other.newLinks_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.newLinks_.isEmpty()) {
+            if (newLinksBuilder_.isEmpty()) {
+              newLinksBuilder_.dispose();
+              newLinksBuilder_ = null;
+              newLinks_ = other.newLinks_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              newLinksBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getNewLinksFieldBuilder() : null;
+            } else {
+              newLinksBuilder_.addAllMessages(other.newLinks_);
+            }
+          }
+        }
+        if (linksToRemoveBuilder_ == null) {
+          if (!other.linksToRemove_.isEmpty()) {
+            if (linksToRemove_.isEmpty()) {
+              linksToRemove_ = other.linksToRemove_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureLinksToRemoveIsMutable();
+              linksToRemove_.addAll(other.linksToRemove_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linksToRemove_.isEmpty()) {
+            if (linksToRemoveBuilder_.isEmpty()) {
+              linksToRemoveBuilder_.dispose();
+              linksToRemoveBuilder_ = null;
+              linksToRemove_ = other.linksToRemove_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              linksToRemoveBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getLinksToRemoveFieldBuilder() : null;
+            } else {
+              linksToRemoveBuilder_.addAllMessages(other.linksToRemove_);
+            }
+          }
+        }
+        if (other.hasIsDelta()) {
+          setIsDelta(other.getIsDelta());
+        }
+        if (other.hasWriterName()) {
+          setWriterName(other.getWriterName());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasUid()) {
+          
+          return false;
+        }
+        if (!hasRevision()) {
+          
+          return false;
+        }
+        if (!hasIsDelta()) {
+          
+          return false;
+        }
+        if (!hasWriterName()) {
+          
+          return false;
+        }
+        for (int i = 0; i < getNewLinksCount(); i++) {
+          if (!getNewLinks(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getLinksToRemoveCount(); i++) {
+          if (!getLinksToRemove(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              uid_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              revision_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              ipaaca.protobuf.Ipaaca.LinkSet.Builder subBuilder = ipaaca.protobuf.Ipaaca.LinkSet.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addNewLinks(subBuilder.buildPartial());
+              break;
+            }
+            case 34: {
+              ipaaca.protobuf.Ipaaca.LinkSet.Builder subBuilder = ipaaca.protobuf.Ipaaca.LinkSet.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addLinksToRemove(subBuilder.buildPartial());
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000010;
+              isDelta_ = input.readBool();
+              break;
+            }
+            case 50: {
+              bitField0_ |= 0x00000020;
+              writerName_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string uid = 1;
+      private java.lang.Object uid_ = "";
+      public boolean hasUid() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setUid(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUid() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      void setUid(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        uid_ = value;
+        onChanged();
+      }
+      
+      // required uint32 revision = 2;
+      private int revision_ ;
+      public boolean hasRevision() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getRevision() {
+        return revision_;
+      }
+      public Builder setRevision(int value) {
+        bitField0_ |= 0x00000002;
+        revision_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearRevision() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        revision_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .ipaaca.protobuf.LinkSet new_links = 3;
+      private java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> newLinks_ =
+        java.util.Collections.emptyList();
+      private void ensureNewLinksIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          newLinks_ = new java.util.ArrayList<ipaaca.protobuf.Ipaaca.LinkSet>(newLinks_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> newLinksBuilder_;
+      
+      public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> getNewLinksList() {
+        if (newLinksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(newLinks_);
+        } else {
+          return newLinksBuilder_.getMessageList();
+        }
+      }
+      public int getNewLinksCount() {
+        if (newLinksBuilder_ == null) {
+          return newLinks_.size();
+        } else {
+          return newLinksBuilder_.getCount();
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet getNewLinks(int index) {
+        if (newLinksBuilder_ == null) {
+          return newLinks_.get(index);
+        } else {
+          return newLinksBuilder_.getMessage(index);
+        }
+      }
+      public Builder setNewLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (newLinksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNewLinksIsMutable();
+          newLinks_.set(index, value);
+          onChanged();
+        } else {
+          newLinksBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setNewLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (newLinksBuilder_ == null) {
+          ensureNewLinksIsMutable();
+          newLinks_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          newLinksBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addNewLinks(ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (newLinksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNewLinksIsMutable();
+          newLinks_.add(value);
+          onChanged();
+        } else {
+          newLinksBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addNewLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (newLinksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNewLinksIsMutable();
+          newLinks_.add(index, value);
+          onChanged();
+        } else {
+          newLinksBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addNewLinks(
+          ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (newLinksBuilder_ == null) {
+          ensureNewLinksIsMutable();
+          newLinks_.add(builderForValue.build());
+          onChanged();
+        } else {
+          newLinksBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addNewLinks(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (newLinksBuilder_ == null) {
+          ensureNewLinksIsMutable();
+          newLinks_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          newLinksBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllNewLinks(
+          java.lang.Iterable<? extends ipaaca.protobuf.Ipaaca.LinkSet> values) {
+        if (newLinksBuilder_ == null) {
+          ensureNewLinksIsMutable();
+          super.addAll(values, newLinks_);
+          onChanged();
+        } else {
+          newLinksBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearNewLinks() {
+        if (newLinksBuilder_ == null) {
+          newLinks_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          newLinksBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeNewLinks(int index) {
+        if (newLinksBuilder_ == null) {
+          ensureNewLinksIsMutable();
+          newLinks_.remove(index);
+          onChanged();
+        } else {
+          newLinksBuilder_.remove(index);
+        }
+        return this;
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder getNewLinksBuilder(
+          int index) {
+        return getNewLinksFieldBuilder().getBuilder(index);
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getNewLinksOrBuilder(
+          int index) {
+        if (newLinksBuilder_ == null) {
+          return newLinks_.get(index);  } else {
+          return newLinksBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+           getNewLinksOrBuilderList() {
+        if (newLinksBuilder_ != null) {
+          return newLinksBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(newLinks_);
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder addNewLinksBuilder() {
+        return getNewLinksFieldBuilder().addBuilder(
+            ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance());
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder addNewLinksBuilder(
+          int index) {
+        return getNewLinksFieldBuilder().addBuilder(
+            index, ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance());
+      }
+      public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet.Builder> 
+           getNewLinksBuilderList() {
+        return getNewLinksFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+          getNewLinksFieldBuilder() {
+        if (newLinksBuilder_ == null) {
+          newLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder>(
+                  newLinks_,
+                  ((bitField0_ & 0x00000004) == 0x00000004),
+                  getParentForChildren(),
+                  isClean());
+          newLinks_ = null;
+        }
+        return newLinksBuilder_;
+      }
+      
+      // repeated .ipaaca.protobuf.LinkSet links_to_remove = 4;
+      private java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> linksToRemove_ =
+        java.util.Collections.emptyList();
+      private void ensureLinksToRemoveIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          linksToRemove_ = new java.util.ArrayList<ipaaca.protobuf.Ipaaca.LinkSet>(linksToRemove_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> linksToRemoveBuilder_;
+      
+      public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet> getLinksToRemoveList() {
+        if (linksToRemoveBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linksToRemove_);
+        } else {
+          return linksToRemoveBuilder_.getMessageList();
+        }
+      }
+      public int getLinksToRemoveCount() {
+        if (linksToRemoveBuilder_ == null) {
+          return linksToRemove_.size();
+        } else {
+          return linksToRemoveBuilder_.getCount();
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet getLinksToRemove(int index) {
+        if (linksToRemoveBuilder_ == null) {
+          return linksToRemove_.get(index);
+        } else {
+          return linksToRemoveBuilder_.getMessage(index);
+        }
+      }
+      public Builder setLinksToRemove(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (linksToRemoveBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.set(index, value);
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setLinksToRemove(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (linksToRemoveBuilder_ == null) {
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addLinksToRemove(ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (linksToRemoveBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.add(value);
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addLinksToRemove(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet value) {
+        if (linksToRemoveBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.add(index, value);
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addLinksToRemove(
+          ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (linksToRemoveBuilder_ == null) {
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addLinksToRemove(
+          int index, ipaaca.protobuf.Ipaaca.LinkSet.Builder builderForValue) {
+        if (linksToRemoveBuilder_ == null) {
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllLinksToRemove(
+          java.lang.Iterable<? extends ipaaca.protobuf.Ipaaca.LinkSet> values) {
+        if (linksToRemoveBuilder_ == null) {
+          ensureLinksToRemoveIsMutable();
+          super.addAll(values, linksToRemove_);
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearLinksToRemove() {
+        if (linksToRemoveBuilder_ == null) {
+          linksToRemove_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeLinksToRemove(int index) {
+        if (linksToRemoveBuilder_ == null) {
+          ensureLinksToRemoveIsMutable();
+          linksToRemove_.remove(index);
+          onChanged();
+        } else {
+          linksToRemoveBuilder_.remove(index);
+        }
+        return this;
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder getLinksToRemoveBuilder(
+          int index) {
+        return getLinksToRemoveFieldBuilder().getBuilder(index);
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSetOrBuilder getLinksToRemoveOrBuilder(
+          int index) {
+        if (linksToRemoveBuilder_ == null) {
+          return linksToRemove_.get(index);  } else {
+          return linksToRemoveBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+           getLinksToRemoveOrBuilderList() {
+        if (linksToRemoveBuilder_ != null) {
+          return linksToRemoveBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linksToRemove_);
+        }
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder addLinksToRemoveBuilder() {
+        return getLinksToRemoveFieldBuilder().addBuilder(
+            ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance());
+      }
+      public ipaaca.protobuf.Ipaaca.LinkSet.Builder addLinksToRemoveBuilder(
+          int index) {
+        return getLinksToRemoveFieldBuilder().addBuilder(
+            index, ipaaca.protobuf.Ipaaca.LinkSet.getDefaultInstance());
+      }
+      public java.util.List<ipaaca.protobuf.Ipaaca.LinkSet.Builder> 
+           getLinksToRemoveBuilderList() {
+        return getLinksToRemoveFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder> 
+          getLinksToRemoveFieldBuilder() {
+        if (linksToRemoveBuilder_ == null) {
+          linksToRemoveBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              ipaaca.protobuf.Ipaaca.LinkSet, ipaaca.protobuf.Ipaaca.LinkSet.Builder, ipaaca.protobuf.Ipaaca.LinkSetOrBuilder>(
+                  linksToRemove_,
+                  ((bitField0_ & 0x00000008) == 0x00000008),
+                  getParentForChildren(),
+                  isClean());
+          linksToRemove_ = null;
+        }
+        return linksToRemoveBuilder_;
+      }
+      
+      // required bool is_delta = 5 [default = false];
+      private boolean isDelta_ ;
+      public boolean hasIsDelta() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public boolean getIsDelta() {
+        return isDelta_;
+      }
+      public Builder setIsDelta(boolean value) {
+        bitField0_ |= 0x00000010;
+        isDelta_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIsDelta() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        isDelta_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // required string writer_name = 6;
+      private java.lang.Object writerName_ = "";
+      public boolean hasWriterName() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public String getWriterName() {
+        java.lang.Object ref = writerName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          writerName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setWriterName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        writerName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearWriterName() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        writerName_ = getDefaultInstance().getWriterName();
+        onChanged();
+        return this;
+      }
+      void setWriterName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000020;
+        writerName_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:ipaaca.protobuf.IULinkUpdate)
+    }
+    
+    static {
+      defaultInstance = new IULinkUpdate(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:ipaaca.protobuf.IULinkUpdate)
+  }
+  
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_IntMessage_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_IntMessage_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_LinkSet_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_LinkSet_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_PayloadItem_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_PayloadItem_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_IU_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_IU_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_IUPayloadUpdate_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_IUPayloadUpdate_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_IURetraction_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_IURetraction_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_IUCommission_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_IUCommission_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_ipaaca_protobuf_IULinkUpdate_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ipaaca_protobuf_IULinkUpdate_fieldAccessorTable;
+  
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\020src/ipaaca.proto\022\017ipaaca.protobuf\"\033\n\nI" +
+      "ntMessage\022\r\n\005value\030\001 \002(\021\"(\n\007LinkSet\022\014\n\004t" +
+      "ype\030\001 \002(\t\022\017\n\007targets\030\002 \003(\t\"<\n\013PayloadIte" +
+      "m\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\014paylo" +
+      "ad_type\030\004 \002(\t:\003MAP\022\022\n\nowner_name\030\005 \002(\t\022\030" +
+      "\n\tcommitted\030\006 \002(\010:\005false\0229\n\013access_mode\030" +
+      "\007 \002(\0162\036.ipaaca.protobuf.IU.AccessMode:\004P" +
+      "USH\022\030\n\tread_only\030\010 \002(\010:\005false\022-\n\007payload",
+      "\030\t \003(\0132\034.ipaaca.protobuf.PayloadItem\022\'\n\005" +
+      "links\030\n \003(\0132\030.ipaaca.protobuf.LinkSet\"/\n" +
+      "\nAccessMode\022\010\n\004PUSH\020\000\022\n\n\006REMOTE\020\001\022\013\n\007MES" +
+      "SAGE\020\002\"\247\001\n\017IUPayloadUpdate\022\013\n\003uid\030\001 \002(\t\022" +
+      "\020\n\010revision\030\002 \002(\r\022/\n\tnew_items\030\003 \003(\0132\034.i" +
+      "paaca.protobuf.PayloadItem\022\026\n\016keys_to_re" +
+      "move\030\004 \003(\t\022\027\n\010is_delta\030\005 \002(\010:\005false\022\023\n\013w" +
+      "riter_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\003uid\030\001 \002(\t\022\020\n\010revision\030\002 \002(\r\022\023\n\013writer",
+      "_name\030\003 \002(\t\"\273\001\n\014IULinkUpdate\022\013\n\003uid\030\001 \002(" +
+      "\t\022\020\n\010revision\030\002 \002(\r\022+\n\tnew_links\030\003 \003(\0132\030" +
+      ".ipaaca.protobuf.LinkSet\0221\n\017links_to_rem" +
+      "ove\030\004 \003(\0132\030.ipaaca.protobuf.LinkSet\022\027\n\010i" +
+      "s_delta\030\005 \002(\010:\005false\022\023\n\013writer_name\030\006 \002(" +
+      "\t"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+        public com.google.protobuf.ExtensionRegistry assignDescriptors(
+            com.google.protobuf.Descriptors.FileDescriptor root) {
+          descriptor = root;
+          internal_static_ipaaca_protobuf_IntMessage_descriptor =
+            getDescriptor().getMessageTypes().get(0);
+          internal_static_ipaaca_protobuf_IntMessage_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_IntMessage_descriptor,
+              new java.lang.String[] { "Value", },
+              ipaaca.protobuf.Ipaaca.IntMessage.class,
+              ipaaca.protobuf.Ipaaca.IntMessage.Builder.class);
+          internal_static_ipaaca_protobuf_LinkSet_descriptor =
+            getDescriptor().getMessageTypes().get(1);
+          internal_static_ipaaca_protobuf_LinkSet_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_LinkSet_descriptor,
+              new java.lang.String[] { "Type", "Targets", },
+              ipaaca.protobuf.Ipaaca.LinkSet.class,
+              ipaaca.protobuf.Ipaaca.LinkSet.Builder.class);
+          internal_static_ipaaca_protobuf_PayloadItem_descriptor =
+            getDescriptor().getMessageTypes().get(2);
+          internal_static_ipaaca_protobuf_PayloadItem_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_PayloadItem_descriptor,
+              new java.lang.String[] { "Key", "Value", "Type", },
+              ipaaca.protobuf.Ipaaca.PayloadItem.class,
+              ipaaca.protobuf.Ipaaca.PayloadItem.Builder.class);
+          internal_static_ipaaca_protobuf_IU_descriptor =
+            getDescriptor().getMessageTypes().get(3);
+          internal_static_ipaaca_protobuf_IU_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_IU_descriptor,
+              new java.lang.String[] { "Uid", "Revision", "Category", "PayloadType", "OwnerName", "Committed", "AccessMode", "ReadOnly", "Payload", "Links", },
+              ipaaca.protobuf.Ipaaca.IU.class,
+              ipaaca.protobuf.Ipaaca.IU.Builder.class);
+          internal_static_ipaaca_protobuf_IUPayloadUpdate_descriptor =
+            getDescriptor().getMessageTypes().get(4);
+          internal_static_ipaaca_protobuf_IUPayloadUpdate_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_IUPayloadUpdate_descriptor,
+              new java.lang.String[] { "Uid", "Revision", "NewItems", "KeysToRemove", "IsDelta", "WriterName", },
+              ipaaca.protobuf.Ipaaca.IUPayloadUpdate.class,
+              ipaaca.protobuf.Ipaaca.IUPayloadUpdate.Builder.class);
+          internal_static_ipaaca_protobuf_IURetraction_descriptor =
+            getDescriptor().getMessageTypes().get(5);
+          internal_static_ipaaca_protobuf_IURetraction_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_IURetraction_descriptor,
+              new java.lang.String[] { "Uid", "Revision", },
+              ipaaca.protobuf.Ipaaca.IURetraction.class,
+              ipaaca.protobuf.Ipaaca.IURetraction.Builder.class);
+          internal_static_ipaaca_protobuf_IUCommission_descriptor =
+            getDescriptor().getMessageTypes().get(6);
+          internal_static_ipaaca_protobuf_IUCommission_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_IUCommission_descriptor,
+              new java.lang.String[] { "Uid", "Revision", "WriterName", },
+              ipaaca.protobuf.Ipaaca.IUCommission.class,
+              ipaaca.protobuf.Ipaaca.IUCommission.Builder.class);
+          internal_static_ipaaca_protobuf_IULinkUpdate_descriptor =
+            getDescriptor().getMessageTypes().get(7);
+          internal_static_ipaaca_protobuf_IULinkUpdate_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_ipaaca_protobuf_IULinkUpdate_descriptor,
+              new java.lang.String[] { "Uid", "Revision", "NewLinks", "LinksToRemove", "IsDelta", "WriterName", },
+              ipaaca.protobuf.Ipaaca.IULinkUpdate.class,
+              ipaaca.protobuf.Ipaaca.IULinkUpdate.Builder.class);
+          return null;
+        }
+      };
+    com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        }, assigner);
+  }
+  
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/proto/build/python/src/ipaaca_pb2.py b/proto/build/python/src/ipaaca_pb2.py
new file mode 100644
index 0000000..944f293
--- /dev/null
+++ b/proto/build/python/src/ipaaca_pb2.py
@@ -0,0 +1,507 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+from google.protobuf import descriptor
+from google.protobuf import message
+from google.protobuf import reflection
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+
+
+DESCRIPTOR = descriptor.FileDescriptor(
+  name='src/ipaaca.proto',
+  package='ipaaca.protobuf',
+  serialized_pb='\n\x10src/ipaaca.proto\x12\x0fipaaca.protobuf\"\x1b\n\nIntMessage\x12\r\n\x05value\x18\x01 \x02(\x11\"(\n\x07LinkSet\x12\x0c\n\x04type\x18\x01 \x02(\t\x12\x0f\n\x07targets\x18\x02 \x03(\t\"<\n\x0bPayloadItem\x12\x0b\n\x03key\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\x12\x11\n\x04type\x18\x03 \x02(\t:\x03str\"\xe3\x02\n\x02IU\x12\x0b\n\x03uid\x18\x01 \x02(\t\x12\x10\n\x08revision\x18\x02 \x02(\r\x12\x17\n\x08\x63\x61tegory\x18\x03 \x02(\t:\x05undef\x12\x19\n\x0cpayload_type\x18\x04 \x02(\t:\x03MAP\x12\x12\n\nowner_name\x18\x05 \x02(\t\x12\x18\n\tcommitted\x18\x06 \x02(\x08:\x05\x66\x61lse\x12\x39\n\x0b\x61\x63\x63\x65ss_mode\x18\x07 \x02(\x0e\x32\x1e.ipaaca.protobuf.IU.AccessMode:\x04PUSH\x12\x18\n\tread_only\x18\x08 \x02(\x08:\x05\x66\x61lse\x12-\n\x07payload\x18\t \x03(\x0b\x32\x1c.ipaaca.protobuf.PayloadItem\x12\'\n\x05links\x18\n \x03(\x0b\x32\x18.ipaaca.protobuf.LinkSet\"/\n\nAccessMode\x12\x08\n\x04PUSH\x10\x00\x12\n\n\x06REMOTE\x10\x01\x12\x0b\n\x07MESSAGE\x10\x02\"\xa7\x01\n\x0fIUPayloadUpdate\x12\x0b\n\x03uid\x18\x01 \x02(\t\x12\x10\n\x08revision\x18\x02 \x02(\r\x12/\n\tnew_items\x18\x03 \x03(\x0b\x32\x1c.ipaaca.protobuf.PayloadItem\x12\x16\n\x0ekeys_to_remove\x18\x04 \x03(\t\x12\x17\n\x08is_delta\x18\x05 \x02(\x08:\x05\x66\x61lse\x12\x13\n\x0bwriter_name\x18\x06 \x02(\t\"-\n\x0cIURetraction\x12\x0b\n\x03uid\x18\x01 \x02(\t\x12\x10\n\x08revision\x18\x02 \x02(\r\"B\n\x0cIUCommission\x12\x0b\n\x03uid\x18\x01 \x02(\t\x12\x10\n\x08revision\x18\x02 \x02(\r\x12\x13\n\x0bwriter_name\x18\x03 \x02(\t\"\xbb\x01\n\x0cIULinkUpdate\x12\x0b\n\x03uid\x18\x01 \x02(\t\x12\x10\n\x08revision\x18\x02 \x02(\r\x12+\n\tnew_links\x18\x03 \x03(\x0b\x32\x18.ipaaca.protobuf.LinkSet\x12\x31\n\x0flinks_to_remove\x18\x04 \x03(\x0b\x32\x18.ipaaca.protobuf.LinkSet\x12\x17\n\x08is_delta\x18\x05 \x02(\x08:\x05\x66\x61lse\x12\x13\n\x0bwriter_name\x18\x06 \x02(\t')
+
+
+
+_IU_ACCESSMODE = descriptor.EnumDescriptor(
+  name='AccessMode',
+  full_name='ipaaca.protobuf.IU.AccessMode',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    descriptor.EnumValueDescriptor(
+      name='PUSH', index=0, number=0,
+      options=None,
+      type=None),
+    descriptor.EnumValueDescriptor(
+      name='REMOTE', index=1, number=1,
+      options=None,
+      type=None),
+    descriptor.EnumValueDescriptor(
+      name='MESSAGE', index=2, number=2,
+      options=None,
+      type=None),
+  ],
+  containing_type=None,
+  options=None,
+  serialized_start=479,
+  serialized_end=526,
+)
+
+
+_INTMESSAGE = descriptor.Descriptor(
+  name='IntMessage',
+  full_name='ipaaca.protobuf.IntMessage',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='value', full_name='ipaaca.protobuf.IntMessage.value', index=0,
+      number=1, type=17, cpp_type=1, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=37,
+  serialized_end=64,
+)
+
+
+_LINKSET = descriptor.Descriptor(
+  name='LinkSet',
+  full_name='ipaaca.protobuf.LinkSet',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='type', full_name='ipaaca.protobuf.LinkSet.type', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='targets', full_name='ipaaca.protobuf.LinkSet.targets', index=1,
+      number=2, type=9, cpp_type=9, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=66,
+  serialized_end=106,
+)
+
+
+_PAYLOADITEM = descriptor.Descriptor(
+  name='PayloadItem',
+  full_name='ipaaca.protobuf.PayloadItem',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='key', full_name='ipaaca.protobuf.PayloadItem.key', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='value', full_name='ipaaca.protobuf.PayloadItem.value', index=1,
+      number=2, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='type', full_name='ipaaca.protobuf.PayloadItem.type', index=2,
+      number=3, type=9, cpp_type=9, label=2,
+      has_default_value=True, default_value=unicode("str", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=108,
+  serialized_end=168,
+)
+
+
+_IU = descriptor.Descriptor(
+  name='IU',
+  full_name='ipaaca.protobuf.IU',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='uid', full_name='ipaaca.protobuf.IU.uid', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='revision', full_name='ipaaca.protobuf.IU.revision', index=1,
+      number=2, type=13, cpp_type=3, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='category', full_name='ipaaca.protobuf.IU.category', index=2,
+      number=3, type=9, cpp_type=9, label=2,
+      has_default_value=True, default_value=unicode("undef", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='payload_type', full_name='ipaaca.protobuf.IU.payload_type', index=3,
+      number=4, type=9, cpp_type=9, label=2,
+      has_default_value=True, default_value=unicode("MAP", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='owner_name', full_name='ipaaca.protobuf.IU.owner_name', index=4,
+      number=5, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='committed', full_name='ipaaca.protobuf.IU.committed', index=5,
+      number=6, type=8, cpp_type=7, label=2,
+      has_default_value=True, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='access_mode', full_name='ipaaca.protobuf.IU.access_mode', index=6,
+      number=7, type=14, cpp_type=8, label=2,
+      has_default_value=True, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='read_only', full_name='ipaaca.protobuf.IU.read_only', index=7,
+      number=8, type=8, cpp_type=7, label=2,
+      has_default_value=True, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='payload', full_name='ipaaca.protobuf.IU.payload', index=8,
+      number=9, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='links', full_name='ipaaca.protobuf.IU.links', index=9,
+      number=10, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+    _IU_ACCESSMODE,
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=171,
+  serialized_end=526,
+)
+
+
+_IUPAYLOADUPDATE = descriptor.Descriptor(
+  name='IUPayloadUpdate',
+  full_name='ipaaca.protobuf.IUPayloadUpdate',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='uid', full_name='ipaaca.protobuf.IUPayloadUpdate.uid', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='revision', full_name='ipaaca.protobuf.IUPayloadUpdate.revision', index=1,
+      number=2, type=13, cpp_type=3, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='new_items', full_name='ipaaca.protobuf.IUPayloadUpdate.new_items', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='keys_to_remove', full_name='ipaaca.protobuf.IUPayloadUpdate.keys_to_remove', index=3,
+      number=4, type=9, cpp_type=9, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='is_delta', full_name='ipaaca.protobuf.IUPayloadUpdate.is_delta', index=4,
+      number=5, type=8, cpp_type=7, label=2,
+      has_default_value=True, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='writer_name', full_name='ipaaca.protobuf.IUPayloadUpdate.writer_name', index=5,
+      number=6, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=529,
+  serialized_end=696,
+)
+
+
+_IURETRACTION = descriptor.Descriptor(
+  name='IURetraction',
+  full_name='ipaaca.protobuf.IURetraction',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='uid', full_name='ipaaca.protobuf.IURetraction.uid', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='revision', full_name='ipaaca.protobuf.IURetraction.revision', index=1,
+      number=2, type=13, cpp_type=3, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=698,
+  serialized_end=743,
+)
+
+
+_IUCOMMISSION = descriptor.Descriptor(
+  name='IUCommission',
+  full_name='ipaaca.protobuf.IUCommission',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='uid', full_name='ipaaca.protobuf.IUCommission.uid', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='revision', full_name='ipaaca.protobuf.IUCommission.revision', index=1,
+      number=2, type=13, cpp_type=3, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='writer_name', full_name='ipaaca.protobuf.IUCommission.writer_name', index=2,
+      number=3, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=745,
+  serialized_end=811,
+)
+
+
+_IULINKUPDATE = descriptor.Descriptor(
+  name='IULinkUpdate',
+  full_name='ipaaca.protobuf.IULinkUpdate',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    descriptor.FieldDescriptor(
+      name='uid', full_name='ipaaca.protobuf.IULinkUpdate.uid', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='revision', full_name='ipaaca.protobuf.IULinkUpdate.revision', index=1,
+      number=2, type=13, cpp_type=3, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='new_links', full_name='ipaaca.protobuf.IULinkUpdate.new_links', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='links_to_remove', full_name='ipaaca.protobuf.IULinkUpdate.links_to_remove', index=3,
+      number=4, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='is_delta', full_name='ipaaca.protobuf.IULinkUpdate.is_delta', index=4,
+      number=5, type=8, cpp_type=7, label=2,
+      has_default_value=True, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    descriptor.FieldDescriptor(
+      name='writer_name', full_name='ipaaca.protobuf.IULinkUpdate.writer_name', index=5,
+      number=6, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=814,
+  serialized_end=1001,
+)
+
+_IU.fields_by_name['access_mode'].enum_type = _IU_ACCESSMODE
+_IU.fields_by_name['payload'].message_type = _PAYLOADITEM
+_IU.fields_by_name['links'].message_type = _LINKSET
+_IU_ACCESSMODE.containing_type = _IU;
+_IUPAYLOADUPDATE.fields_by_name['new_items'].message_type = _PAYLOADITEM
+_IULINKUPDATE.fields_by_name['new_links'].message_type = _LINKSET
+_IULINKUPDATE.fields_by_name['links_to_remove'].message_type = _LINKSET
+DESCRIPTOR.message_types_by_name['IntMessage'] = _INTMESSAGE
+DESCRIPTOR.message_types_by_name['LinkSet'] = _LINKSET
+DESCRIPTOR.message_types_by_name['PayloadItem'] = _PAYLOADITEM
+DESCRIPTOR.message_types_by_name['IU'] = _IU
+DESCRIPTOR.message_types_by_name['IUPayloadUpdate'] = _IUPAYLOADUPDATE
+DESCRIPTOR.message_types_by_name['IURetraction'] = _IURETRACTION
+DESCRIPTOR.message_types_by_name['IUCommission'] = _IUCOMMISSION
+DESCRIPTOR.message_types_by_name['IULinkUpdate'] = _IULINKUPDATE
+
+class IntMessage(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _INTMESSAGE
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.IntMessage)
+
+class LinkSet(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _LINKSET
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.LinkSet)
+
+class PayloadItem(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _PAYLOADITEM
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.PayloadItem)
+
+class IU(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _IU
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.IU)
+
+class IUPayloadUpdate(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _IUPAYLOADUPDATE
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUPayloadUpdate)
+
+class IURetraction(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _IURETRACTION
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.IURetraction)
+
+class IUCommission(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _IUCOMMISSION
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.IUCommission)
+
+class IULinkUpdate(message.Message):
+  __metaclass__ = reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _IULINKUPDATE
+  
+  # @@protoc_insertion_point(class_scope:ipaaca.protobuf.IULinkUpdate)
+
+# @@protoc_insertion_point(module_scope)
diff --git a/proto/ivy.xml b/proto/ivy.xml
new file mode 100644
index 0000000..264e38d
--- /dev/null
+++ b/proto/ivy.xml
@@ -0,0 +1,6 @@
+<ivy-module version="2.0">
+   <info organisation="HMI" module="IpaacaJava" />
+   <dependencies>
+      <dependency org="junit" name="junit" rev="latest.release"/>
+   </dependencies>
+</ivy-module>
diff --git a/proto/ipaaca.proto b/proto/src/ipaaca.proto
similarity index 100%
rename from proto/ipaaca.proto
rename to proto/src/ipaaca.proto
-- 
GitLab