From 3b42eb5104bb625126e4e98cfd90aa0103aa42ec Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Thu, 28 May 2020 19:52:56 +0200
Subject: [PATCH] working state without sudo

---
 .gitignore                        |    7 +
 .gitlab-ci.yml                    |   24 +-
 .gitmodules                       |    6 +
 CMakeLists.txt                    |   88 +-
 lib/paho.mqtt.c                   |    1 +
 lib/paho.mqtt.cpp                 |    1 +
 package.xml                       |    4 +-
 src/MqttRosConnectionTestNode.cpp |    6 +-
 src/MqttToRosNode.cpp             |    6 +-
 src/RobotStateProvider.cpp        |    2 +-
 src/messages/dataconfig.pb.cc     |  673 -------
 src/messages/dataconfig.pb.h      |  313 ----
 src/messages/linkstate.pb.cc      | 2693 -----------------------------
 src/messages/linkstate.pb.h       | 1252 --------------
 src/messages/robotconfig.pb.cc    |  374 ----
 src/messages/robotconfig.pb.h     |  174 --
 src/messages/trajectory.pb.cc     |  746 --------
 src/messages/trajectory.pb.h      |  322 ----
 18 files changed, 84 insertions(+), 6608 deletions(-)
 create mode 100644 .gitmodules
 create mode 160000 lib/paho.mqtt.c
 create mode 160000 lib/paho.mqtt.cpp
 delete mode 100644 src/messages/dataconfig.pb.cc
 delete mode 100644 src/messages/dataconfig.pb.h
 delete mode 100644 src/messages/linkstate.pb.cc
 delete mode 100644 src/messages/linkstate.pb.h
 delete mode 100644 src/messages/robotconfig.pb.cc
 delete mode 100644 src/messages/robotconfig.pb.h
 delete mode 100644 src/messages/trajectory.pb.cc
 delete mode 100644 src/messages/trajectory.pb.h

diff --git a/.gitignore b/.gitignore
index 990936c..cba8c13 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,9 @@
 .idea/
 cmake-build-debug/
+GMock-prefix/
+atomic_configure/
+catkin/
+catkin_generated/
+devel/
+gmock/
+
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c0fce25..ecfb45b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,16 +19,16 @@ build-ws:
     - echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
     - source ~/.bashrc
     - rosdep install -y --from-paths .
-    - git clone https://github.com/eclipse/paho.mqtt.c.git
-    - cd paho.mqtt.c
-    - git checkout v1.3.1
-    - cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_ENABLE_TESTING=OFF
-    - cmake --build build/ --target install
-    - ldconfig
-    - cd ..
-    - git clone https://github.com/eclipse/paho.mqtt.cpp
-    - cd paho.mqtt.cpp
-    - cmake -Bbuild -H. -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=FALSE -DPAHO_BUILD_SAMPLES=FALSE
-    - cmake --build build/ --target install
-    - ldconfig
+#   - git clone https://github.com/eclipse/paho.mqtt.c.git
+#   - cd paho.mqtt.c
+#   - git checkout v1.3.1
+#   - cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_ENABLE_TESTING=OFF
+#   - cmake --build build/ --target install
+#   - ldconfig
+#   - cd ..
+#   - git clone https://github.com/eclipse/paho.mqtt.cpp
+#   - cd paho.mqtt.cpp
+#   - cmake -Bbuild -H. -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=FALSE -DPAHO_BUILD_SAMPLES=FALSE
+#   - cmake --build build/ --target install
+#   - ldconfig
     - catkin build
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..684da74
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "lib/paho.mqtt.c"]
+	path = lib/paho.mqtt.c
+	url = https://github.com/eclipse/paho.mqtt.c.git
+[submodule "lib/paho.mqtt.cpp"]
+	path = lib/paho.mqtt.cpp
+	url = https://github.com/eclipse/paho.mqtt.cpp.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5169a3f..471e727 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,24 +29,39 @@ find_package(catkin REQUIRED
 
 # System dependencies are found with CMake's conventions
 find_package(Boost REQUIRED COMPONENTS filesystem)
-find_package(Protobuf 3 REQUIRED)
 
-find_library(PahoMqtt3c libpaho-mqtt3c.so REQUIRED)
-find_library(PahoMqtt3cs libpaho-mqtt3cs.so REQUIRED)
-find_library(PahoMqtt3a libpaho-mqtt3a.so REQUIRED)
-find_library(PahoMqtt3as libpaho-mqtt3as.so REQUIRED)
-find_library(PahoMqttCpp libpaho-mqttpp3.so REQUIRED)
+find_package(Protobuf 3 REQUIRED)
+include_directories(${Protobuf_INCLUDE_DIRS})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS proto/dataconfig.proto)
+protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS proto/linkstate.proto)
+protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS proto/robotconfig.proto)
+protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS proto/dataconfig.proto proto/linkstate.proto proto/robotconfig.proto proto/trajectory.proto)
 
-message("Lib PahoMqtt3c is at: ${PahoMqtt3c}")
-message("Lib PahoMqtt3cs is at: ${PahoMqtt3cs}")
-message("Lib PahoMqtt3a is at: ${PahoMqtt3a}")
-message("Lib PahoMqtt3as is at: ${PahoMqtt3as}")
-message("Lib PahoMqttCpp is at: ${PahoMqttCpp}")
+SET_SOURCE_FILES_PROPERTIES(${PROTO_SRC} ${PROTO_HDRS} PROPERTIES GENERATED TRUE)
+message("psource " ${PROTO_SRC})
+message("pheaders" ${PROTO_HDRS})
 
 find_package(PkgConfig REQUIRED)
 pkg_check_modules(JSONCPP jsoncpp)
 message(${JSONCPP_LIBRARIES})
 
+add_subdirectory(lib/paho.mqtt.c)
+
+
+set(PAHO_MQTT_C_LIBRARIES "${panda_simulation_BINARY_DIR}/lib/paho.mqtt.c/src/libpaho-mqtt3a.so")
+set(PAHO_MQTT_C_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/lib/paho.mqtt.c/src")
+
+add_subdirectory(lib/paho.mqtt.cpp)
+
+get_cmake_property(_variableNames VARIABLES)
+list (SORT _variableNames)
+foreach (_variableName ${_variableNames})
+    message(STATUS "${_variableName}=${${_variableName}}")
+endforeach()
+
+#add_dependencies(paho-mqtt-cpp ${PAHO_MQTT_C_LIBRARIES})
+
 # ################################################################################################################################
 # catkin specific configuration ##
 # ################################################################################################################################
@@ -67,15 +82,18 @@ catkin_package(CATKIN_DEPENDS
 # ################################################################################################################################
 
 # Specify additional locations of header files Your package locations should be listed before other locations
-include_directories(${catkin_INCLUDE_DIRS})
+include_directories(
+        include
+        lib/paho.mqtt.c/src
+        lib/paho.mqtt.cpp/src
+        ${catkin_INCLUDE_DIRS}
+)
+
+add_dependencies(paho-mqttpp3 paho-mqtt3c)
 
 # add custom controller as library
 add_library(${PROJECT_NAME}_controllers_lib src/joint_position_controller.cpp)
 add_library(TrajectoryUtil src/util/TrajectoryUtil.cpp src/util/TrajectoryUtil.h)
-add_library(linkstate src/messages/linkstate.pb.cc src/messages/linkstate.pb.h)
-add_library(dataconfig src/messages/dataconfig.pb.cc src/messages/dataconfig.pb.h)
-add_library(robotconfig src/messages/robotconfig.pb.cc src/messages/robotconfig.pb.h)
-add_library(trajectory src/messages/trajectory.pb.cc src/messages/trajectory.pb.h)
 
 # Specify libraries to link a library or executable target against
 target_link_libraries(${PROJECT_NAME}_controllers_lib ${catkin_LIBRARIES})
@@ -86,10 +104,10 @@ add_executable(robot_state_initializer_node src/robot_state_initializer.cpp)
 add_executable(SafetyAwarePlanner src/SafetyAwarePlanner.cpp src/SafetyEnvironmentCreator.cpp)
 add_executable(SampleConstraintPlanner src/samples/SampleConstraintPlanner.cpp)
 add_executable(SampleTimedCartesianPlanner src/samples/SampleTimedCartesianPlanner.cpp)
-add_executable(RobotStateProvider src/RobotStateProvider.cpp src/mem_persistence.cpp)
+add_executable(RobotStateProvider src/RobotStateProvider.cpp src/mem_persistence.cpp ${PROTO_SRCS} ${PROTO_HDRS})
 add_executable(TimedPlanner src/TimedPlanner.cpp)
-add_executable(MqttToRosNode src/MqttToRosNode.cpp)
-add_executable(MqttRosConnectionTestNode src/MqttRosConnectionTestNode.cpp)
+add_executable(MqttToRosNode src/MqttToRosNode.cpp ${PROTO_SRCS} ${PROTO_HDRS})
+add_executable(MqttRosConnectionTestNode src/MqttRosConnectionTestNode.cpp ${PROTO_SRCS} ${PROTO_HDRS})
 
 target_link_libraries(robot_control_node ${catkin_LIBRARIES} boost_filesystem ${JSONCPP_LIBRARIES})
 target_link_libraries(robot_state_initializer_node ${catkin_LIBRARIES})
@@ -98,33 +116,21 @@ target_link_libraries(SampleConstraintPlanner ${catkin_LIBRARIES})
 target_link_libraries(SampleTimedCartesianPlanner ${catkin_LIBRARIES})
 target_link_libraries(RobotStateProvider LINK_PUBLIC
         ${catkin_LIBRARIES}
-        ${PahoMqtt3c}
-        ${PahoMqtt3cs}
-        ${PahoMqtt3a}
-        ${PahoMqtt3as}
-        ${PahoMqttCpp}
+#        ${PAHO_MQTT_C_LIBRARIES}
+#        libpaho-mqtt3a
+        paho-mqttpp3
         ${Protobuf_LIBRARIES}
-        linkstate)
+        )
 target_link_libraries(MqttToRosNode LINK_PUBLIC
         ${catkin_LIBRARIES}
-        ${PahoMqtt3c}
-        ${PahoMqtt3cs}
-        ${PahoMqtt3a}
-        ${PahoMqtt3as}
-        ${PahoMqttCpp}
+#        ${PAHO_MQTT_C_LIBRARIES}
+        paho-mqttpp3
         ${Protobuf_LIBRARIES}
-        dataconfig
-        robotconfig
-        trajectory)
+        )
 target_link_libraries(MqttRosConnectionTestNode LINK_PUBLIC
         ${catkin_LIBRARIES}
-        ${PahoMqtt3c}
-        ${PahoMqtt3cs}
-        ${PahoMqtt3a}
-        ${PahoMqtt3as}
-        ${PahoMqttCpp}
+#        ${PAHO_MQTT_C_LIBRARIES} #libpaho-mqtt3a
+        paho-mqttpp3
         ${Protobuf_LIBRARIES}
-        dataconfig
-        robotconfig
-        trajectory)
+        )
 target_link_libraries(TimedPlanner ${catkin_LIBRARIES} TrajectoryUtil)
\ No newline at end of file
diff --git a/lib/paho.mqtt.c b/lib/paho.mqtt.c
new file mode 160000
index 0000000..d34c512
--- /dev/null
+++ b/lib/paho.mqtt.c
@@ -0,0 +1 @@
+Subproject commit d34c51214f4172f2e12bb17532c9f44f72a57dd4
diff --git a/lib/paho.mqtt.cpp b/lib/paho.mqtt.cpp
new file mode 160000
index 0000000..f3a2a52
--- /dev/null
+++ b/lib/paho.mqtt.cpp
@@ -0,0 +1 @@
+Subproject commit f3a2a52259b5463ab50eee6d1c033cba18d6e84b
diff --git a/package.xml b/package.xml
index d614468..af9830f 100644
--- a/package.xml
+++ b/package.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <package format="2">
   <name>panda_simulation</name>
-  <version>0.0.0</version>
+  <version>0.2.0</version>
   <description>The panda_simulation package</description>
 
   <!-- One maintainer tag required, multiple allowed, one person per tag -->
@@ -18,6 +18,8 @@
 
   <buildtool_depend>catkin</buildtool_depend>
 
+  <build_depend>protobuf-dev</build_depend>
+
   <depend>controller_manager</depend>
   <depend>effort_controllers</depend>
   <depend>gazebo_ros</depend>
diff --git a/src/MqttRosConnectionTestNode.cpp b/src/MqttRosConnectionTestNode.cpp
index c6a8368..25ee0a6 100644
--- a/src/MqttRosConnectionTestNode.cpp
+++ b/src/MqttRosConnectionTestNode.cpp
@@ -5,10 +5,10 @@
 #include <gazebo_msgs/LinkStates.h>
 #include <mqtt/client.h>
 #include "string.h"
-#include "messages/robotconfig.pb.h"
-#include "messages/dataconfig.pb.h"
+#include "robotconfig.pb.h"
+#include "dataconfig.pb.h"
 #include "mem_persistence.cpp"
-#include "messages/trajectory.pb.h"
+#include "trajectory.pb.h"
 
 using namespace std;
 using namespace std::chrono;
diff --git a/src/MqttToRosNode.cpp b/src/MqttToRosNode.cpp
index cf49a30..8bd463c 100644
--- a/src/MqttToRosNode.cpp
+++ b/src/MqttToRosNode.cpp
@@ -7,9 +7,9 @@
 
 #include "ros/ros.h"
 
-#include "messages/robotconfig.pb.h"
-#include "messages/dataconfig.pb.h"
-#include "messages/trajectory.pb.h"
+#include "robotconfig.pb.h"
+#include "dataconfig.pb.h"
+#include "trajectory.pb.h"
 
 using namespace std;
 using namespace std::chrono;
diff --git a/src/RobotStateProvider.cpp b/src/RobotStateProvider.cpp
index c91f02c..82cbe76 100644
--- a/src/RobotStateProvider.cpp
+++ b/src/RobotStateProvider.cpp
@@ -5,7 +5,7 @@
 #include <gazebo_msgs/LinkStates.h>
 #include <mqtt/client.h>
 #include "string.h"
-#include "messages/linkstate.pb.h"
+#include "linkstate.pb.h"
 #include "mem_persistence.cpp"
 
 bool export_to_log = false;
diff --git a/src/messages/dataconfig.pb.cc b/src/messages/dataconfig.pb.cc
deleted file mode 100644
index 759e606..0000000
--- a/src/messages/dataconfig.pb.cc
+++ /dev/null
@@ -1,673 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: dataconfig.proto
-
-#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
-#include "dataconfig.pb.h"
-
-#include <algorithm>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/stubs/port.h>
-#include <google/protobuf/stubs/once.h>
-#include <google/protobuf/io/coded_stream.h>
-#include <google/protobuf/wire_format_lite_inl.h>
-#include <google/protobuf/descriptor.h>
-#include <google/protobuf/generated_message_reflection.h>
-#include <google/protobuf/reflection_ops.h>
-#include <google/protobuf/wire_format.h>
-// @@protoc_insertion_point(includes)
-
-namespace config {
-
-namespace {
-
-const ::google::protobuf::Descriptor* DataConfig_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  DataConfig_reflection_ = NULL;
-
-}  // namespace
-
-
-void protobuf_AssignDesc_dataconfig_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AssignDesc_dataconfig_2eproto() {
-  protobuf_AddDesc_dataconfig_2eproto();
-  const ::google::protobuf::FileDescriptor* file =
-    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
-      "dataconfig.proto");
-  GOOGLE_CHECK(file != NULL);
-  DataConfig_descriptor_ = file->message_type(0);
-  static const int DataConfig_offsets_[5] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, enableposition_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, enableorientation_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, enabletwistlinear_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, enabletwistangular_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, publishrate_),
-  };
-  DataConfig_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      DataConfig_descriptor_,
-      DataConfig::default_instance_,
-      DataConfig_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(DataConfig),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DataConfig, _internal_metadata_),
-      -1);
-}
-
-namespace {
-
-GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
-inline void protobuf_AssignDescriptorsOnce() {
-  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
-                 &protobuf_AssignDesc_dataconfig_2eproto);
-}
-
-void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD;
-void protobuf_RegisterTypes(const ::std::string&) {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      DataConfig_descriptor_, &DataConfig::default_instance());
-}
-
-}  // namespace
-
-void protobuf_ShutdownFile_dataconfig_2eproto() {
-  delete DataConfig::default_instance_;
-  delete DataConfig_reflection_;
-}
-
-void protobuf_AddDesc_dataconfig_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AddDesc_dataconfig_2eproto() {
-  static bool already_here = false;
-  if (already_here) return;
-  already_here = true;
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-    "\n\020dataconfig.proto\022\006config\"\213\001\n\nDataConfi"
-    "g\022\026\n\016enablePosition\030\001 \002(\010\022\031\n\021enableOrien"
-    "tation\030\002 \002(\010\022\031\n\021enableTwistLinear\030\003 \002(\010\022"
-    "\032\n\022enableTwistAngular\030\004 \002(\010\022\023\n\013publishRa"
-    "te\030\005 \002(\005", 168);
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
-    "dataconfig.proto", &protobuf_RegisterTypes);
-  DataConfig::default_instance_ = new DataConfig();
-  DataConfig::default_instance_->InitAsDefaultInstance();
-  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_dataconfig_2eproto);
-}
-
-// Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_dataconfig_2eproto {
-  StaticDescriptorInitializer_dataconfig_2eproto() {
-    protobuf_AddDesc_dataconfig_2eproto();
-  }
-} static_descriptor_initializer_dataconfig_2eproto_;
-
-// ===================================================================
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int DataConfig::kEnablePositionFieldNumber;
-const int DataConfig::kEnableOrientationFieldNumber;
-const int DataConfig::kEnableTwistLinearFieldNumber;
-const int DataConfig::kEnableTwistAngularFieldNumber;
-const int DataConfig::kPublishRateFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-DataConfig::DataConfig()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:config.DataConfig)
-}
-
-void DataConfig::InitAsDefaultInstance() {
-}
-
-DataConfig::DataConfig(const DataConfig& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:config.DataConfig)
-}
-
-void DataConfig::SharedCtor() {
-  _cached_size_ = 0;
-  enableposition_ = false;
-  enableorientation_ = false;
-  enabletwistlinear_ = false;
-  enabletwistangular_ = false;
-  publishrate_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-DataConfig::~DataConfig() {
-  // @@protoc_insertion_point(destructor:config.DataConfig)
-  SharedDtor();
-}
-
-void DataConfig::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void DataConfig::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* DataConfig::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return DataConfig_descriptor_;
-}
-
-const DataConfig& DataConfig::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_dataconfig_2eproto();
-  return *default_instance_;
-}
-
-DataConfig* DataConfig::default_instance_ = NULL;
-
-DataConfig* DataConfig::New(::google::protobuf::Arena* arena) const {
-  DataConfig* n = new DataConfig;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void DataConfig::Clear() {
-// @@protoc_insertion_point(message_clear_start:config.DataConfig)
-#if defined(__clang__)
-#define ZR_HELPER_(f) \
-  _Pragma("clang diagnostic push") \
-  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
-  __builtin_offsetof(DataConfig, f) \
-  _Pragma("clang diagnostic pop")
-#else
-#define ZR_HELPER_(f) reinterpret_cast<char*>(\
-  &reinterpret_cast<DataConfig*>(16)->f)
-#endif
-
-#define ZR_(first, last) do {\
-  ::memset(&first, 0,\
-           ZR_HELPER_(last) - ZR_HELPER_(first) + sizeof(last));\
-} while (0)
-
-  if (_has_bits_[0 / 32] & 31u) {
-    ZR_(enableposition_, publishrate_);
-  }
-
-#undef ZR_HELPER_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool DataConfig::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:config.DataConfig)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required bool enablePosition = 1;
-      case 1: {
-        if (tag == 8) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
-                 input, &enableposition_)));
-          set_has_enableposition();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(16)) goto parse_enableOrientation;
-        break;
-      }
-
-      // required bool enableOrientation = 2;
-      case 2: {
-        if (tag == 16) {
-         parse_enableOrientation:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
-                 input, &enableorientation_)));
-          set_has_enableorientation();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(24)) goto parse_enableTwistLinear;
-        break;
-      }
-
-      // required bool enableTwistLinear = 3;
-      case 3: {
-        if (tag == 24) {
-         parse_enableTwistLinear:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
-                 input, &enabletwistlinear_)));
-          set_has_enabletwistlinear();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(32)) goto parse_enableTwistAngular;
-        break;
-      }
-
-      // required bool enableTwistAngular = 4;
-      case 4: {
-        if (tag == 32) {
-         parse_enableTwistAngular:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
-                 input, &enabletwistangular_)));
-          set_has_enabletwistangular();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(40)) goto parse_publishRate;
-        break;
-      }
-
-      // required int32 publishRate = 5;
-      case 5: {
-        if (tag == 40) {
-         parse_publishRate:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
-                 input, &publishrate_)));
-          set_has_publishrate();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:config.DataConfig)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:config.DataConfig)
-  return false;
-#undef DO_
-}
-
-void DataConfig::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:config.DataConfig)
-  // required bool enablePosition = 1;
-  if (has_enableposition()) {
-    ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->enableposition(), output);
-  }
-
-  // required bool enableOrientation = 2;
-  if (has_enableorientation()) {
-    ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->enableorientation(), output);
-  }
-
-  // required bool enableTwistLinear = 3;
-  if (has_enabletwistlinear()) {
-    ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->enabletwistlinear(), output);
-  }
-
-  // required bool enableTwistAngular = 4;
-  if (has_enabletwistangular()) {
-    ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->enabletwistangular(), output);
-  }
-
-  // required int32 publishRate = 5;
-  if (has_publishrate()) {
-    ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->publishrate(), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:config.DataConfig)
-}
-
-::google::protobuf::uint8* DataConfig::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:config.DataConfig)
-  // required bool enablePosition = 1;
-  if (has_enableposition()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->enableposition(), target);
-  }
-
-  // required bool enableOrientation = 2;
-  if (has_enableorientation()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->enableorientation(), target);
-  }
-
-  // required bool enableTwistLinear = 3;
-  if (has_enabletwistlinear()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->enabletwistlinear(), target);
-  }
-
-  // required bool enableTwistAngular = 4;
-  if (has_enabletwistangular()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->enabletwistangular(), target);
-  }
-
-  // required int32 publishRate = 5;
-  if (has_publishrate()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(5, this->publishrate(), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:config.DataConfig)
-  return target;
-}
-
-int DataConfig::RequiredFieldsByteSizeFallback() const {
-// @@protoc_insertion_point(required_fields_byte_size_fallback_start:config.DataConfig)
-  int total_size = 0;
-
-  if (has_enableposition()) {
-    // required bool enablePosition = 1;
-    total_size += 1 + 1;
-  }
-
-  if (has_enableorientation()) {
-    // required bool enableOrientation = 2;
-    total_size += 1 + 1;
-  }
-
-  if (has_enabletwistlinear()) {
-    // required bool enableTwistLinear = 3;
-    total_size += 1 + 1;
-  }
-
-  if (has_enabletwistangular()) {
-    // required bool enableTwistAngular = 4;
-    total_size += 1 + 1;
-  }
-
-  if (has_publishrate()) {
-    // required int32 publishRate = 5;
-    total_size += 1 +
-      ::google::protobuf::internal::WireFormatLite::Int32Size(
-        this->publishrate());
-  }
-
-  return total_size;
-}
-int DataConfig::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:config.DataConfig)
-  int total_size = 0;
-
-  if (((_has_bits_[0] & 0x0000001f) ^ 0x0000001f) == 0) {  // All required fields are present.
-    // required bool enablePosition = 1;
-    total_size += 1 + 1;
-
-    // required bool enableOrientation = 2;
-    total_size += 1 + 1;
-
-    // required bool enableTwistLinear = 3;
-    total_size += 1 + 1;
-
-    // required bool enableTwistAngular = 4;
-    total_size += 1 + 1;
-
-    // required int32 publishRate = 5;
-    total_size += 1 +
-      ::google::protobuf::internal::WireFormatLite::Int32Size(
-        this->publishrate());
-
-  } else {
-    total_size += RequiredFieldsByteSizeFallback();
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 DataConfig::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:config.DataConfig)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const DataConfig* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const DataConfig>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:config.DataConfig)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:config.DataConfig)
-    MergeFrom(*source);
-  }
-}
-
-void DataConfig::MergeFrom(const DataConfig& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:config.DataConfig)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_enableposition()) {
-      set_enableposition(from.enableposition());
-    }
-    if (from.has_enableorientation()) {
-      set_enableorientation(from.enableorientation());
-    }
-    if (from.has_enabletwistlinear()) {
-      set_enabletwistlinear(from.enabletwistlinear());
-    }
-    if (from.has_enabletwistangular()) {
-      set_enabletwistangular(from.enabletwistangular());
-    }
-    if (from.has_publishrate()) {
-      set_publishrate(from.publishrate());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void DataConfig::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:config.DataConfig)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void DataConfig::CopyFrom(const DataConfig& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:config.DataConfig)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool DataConfig::IsInitialized() const {
-  if ((_has_bits_[0] & 0x0000001f) != 0x0000001f) return false;
-
-  return true;
-}
-
-void DataConfig::Swap(DataConfig* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void DataConfig::InternalSwap(DataConfig* other) {
-  std::swap(enableposition_, other->enableposition_);
-  std::swap(enableorientation_, other->enableorientation_);
-  std::swap(enabletwistlinear_, other->enabletwistlinear_);
-  std::swap(enabletwistangular_, other->enabletwistangular_);
-  std::swap(publishrate_, other->publishrate_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata DataConfig::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = DataConfig_descriptor_;
-  metadata.reflection = DataConfig_reflection_;
-  return metadata;
-}
-
-#if PROTOBUF_INLINE_NOT_IN_HEADERS
-// DataConfig
-
-// required bool enablePosition = 1;
-bool DataConfig::has_enableposition() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void DataConfig::set_has_enableposition() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void DataConfig::clear_has_enableposition() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void DataConfig::clear_enableposition() {
-  enableposition_ = false;
-  clear_has_enableposition();
-}
- bool DataConfig::enableposition() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enablePosition)
-  return enableposition_;
-}
- void DataConfig::set_enableposition(bool value) {
-  set_has_enableposition();
-  enableposition_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enablePosition)
-}
-
-// required bool enableOrientation = 2;
-bool DataConfig::has_enableorientation() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-void DataConfig::set_has_enableorientation() {
-  _has_bits_[0] |= 0x00000002u;
-}
-void DataConfig::clear_has_enableorientation() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-void DataConfig::clear_enableorientation() {
-  enableorientation_ = false;
-  clear_has_enableorientation();
-}
- bool DataConfig::enableorientation() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enableOrientation)
-  return enableorientation_;
-}
- void DataConfig::set_enableorientation(bool value) {
-  set_has_enableorientation();
-  enableorientation_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enableOrientation)
-}
-
-// required bool enableTwistLinear = 3;
-bool DataConfig::has_enabletwistlinear() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-void DataConfig::set_has_enabletwistlinear() {
-  _has_bits_[0] |= 0x00000004u;
-}
-void DataConfig::clear_has_enabletwistlinear() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-void DataConfig::clear_enabletwistlinear() {
-  enabletwistlinear_ = false;
-  clear_has_enabletwistlinear();
-}
- bool DataConfig::enabletwistlinear() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enableTwistLinear)
-  return enabletwistlinear_;
-}
- void DataConfig::set_enabletwistlinear(bool value) {
-  set_has_enabletwistlinear();
-  enabletwistlinear_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enableTwistLinear)
-}
-
-// required bool enableTwistAngular = 4;
-bool DataConfig::has_enabletwistangular() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-void DataConfig::set_has_enabletwistangular() {
-  _has_bits_[0] |= 0x00000008u;
-}
-void DataConfig::clear_has_enabletwistangular() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-void DataConfig::clear_enabletwistangular() {
-  enabletwistangular_ = false;
-  clear_has_enabletwistangular();
-}
- bool DataConfig::enabletwistangular() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enableTwistAngular)
-  return enabletwistangular_;
-}
- void DataConfig::set_enabletwistangular(bool value) {
-  set_has_enabletwistangular();
-  enabletwistangular_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enableTwistAngular)
-}
-
-// required int32 publishRate = 5;
-bool DataConfig::has_publishrate() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
-}
-void DataConfig::set_has_publishrate() {
-  _has_bits_[0] |= 0x00000010u;
-}
-void DataConfig::clear_has_publishrate() {
-  _has_bits_[0] &= ~0x00000010u;
-}
-void DataConfig::clear_publishrate() {
-  publishrate_ = 0;
-  clear_has_publishrate();
-}
- ::google::protobuf::int32 DataConfig::publishrate() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.publishRate)
-  return publishrate_;
-}
- void DataConfig::set_publishrate(::google::protobuf::int32 value) {
-  set_has_publishrate();
-  publishrate_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.publishRate)
-}
-
-#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace config
-
-// @@protoc_insertion_point(global_scope)
diff --git a/src/messages/dataconfig.pb.h b/src/messages/dataconfig.pb.h
deleted file mode 100644
index 3b5a05c..0000000
--- a/src/messages/dataconfig.pb.h
+++ /dev/null
@@ -1,313 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: dataconfig.proto
-
-#ifndef PROTOBUF_dataconfig_2eproto__INCLUDED
-#define PROTOBUF_dataconfig_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 3000000
-#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 3000000 < 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/arena.h>
-#include <google/protobuf/arenastring.h>
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/metadata.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-#include <google/protobuf/unknown_field_set.h>
-// @@protoc_insertion_point(includes)
-
-namespace config {
-
-// Internal implementation detail -- do not call these.
-void protobuf_AddDesc_dataconfig_2eproto();
-void protobuf_AssignDesc_dataconfig_2eproto();
-void protobuf_ShutdownFile_dataconfig_2eproto();
-
-class DataConfig;
-
-// ===================================================================
-
-class DataConfig : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:config.DataConfig) */ {
- public:
-  DataConfig();
-  virtual ~DataConfig();
-
-  DataConfig(const DataConfig& from);
-
-  inline DataConfig& operator=(const DataConfig& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const DataConfig& default_instance();
-
-  void Swap(DataConfig* other);
-
-  // implements Message ----------------------------------------------
-
-  inline DataConfig* New() const { return New(NULL); }
-
-  DataConfig* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const DataConfig& from);
-  void MergeFrom(const DataConfig& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(DataConfig* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required bool enablePosition = 1;
-  bool has_enableposition() const;
-  void clear_enableposition();
-  static const int kEnablePositionFieldNumber = 1;
-  bool enableposition() const;
-  void set_enableposition(bool value);
-
-  // required bool enableOrientation = 2;
-  bool has_enableorientation() const;
-  void clear_enableorientation();
-  static const int kEnableOrientationFieldNumber = 2;
-  bool enableorientation() const;
-  void set_enableorientation(bool value);
-
-  // required bool enableTwistLinear = 3;
-  bool has_enabletwistlinear() const;
-  void clear_enabletwistlinear();
-  static const int kEnableTwistLinearFieldNumber = 3;
-  bool enabletwistlinear() const;
-  void set_enabletwistlinear(bool value);
-
-  // required bool enableTwistAngular = 4;
-  bool has_enabletwistangular() const;
-  void clear_enabletwistangular();
-  static const int kEnableTwistAngularFieldNumber = 4;
-  bool enabletwistangular() const;
-  void set_enabletwistangular(bool value);
-
-  // required int32 publishRate = 5;
-  bool has_publishrate() const;
-  void clear_publishrate();
-  static const int kPublishRateFieldNumber = 5;
-  ::google::protobuf::int32 publishrate() const;
-  void set_publishrate(::google::protobuf::int32 value);
-
-  // @@protoc_insertion_point(class_scope:config.DataConfig)
- private:
-  inline void set_has_enableposition();
-  inline void clear_has_enableposition();
-  inline void set_has_enableorientation();
-  inline void clear_has_enableorientation();
-  inline void set_has_enabletwistlinear();
-  inline void clear_has_enabletwistlinear();
-  inline void set_has_enabletwistangular();
-  inline void clear_has_enabletwistangular();
-  inline void set_has_publishrate();
-  inline void clear_has_publishrate();
-
-  // helper for ByteSize()
-  int RequiredFieldsByteSizeFallback() const;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  bool enableposition_;
-  bool enableorientation_;
-  bool enabletwistlinear_;
-  bool enabletwistangular_;
-  ::google::protobuf::int32 publishrate_;
-  friend void  protobuf_AddDesc_dataconfig_2eproto();
-  friend void protobuf_AssignDesc_dataconfig_2eproto();
-  friend void protobuf_ShutdownFile_dataconfig_2eproto();
-
-  void InitAsDefaultInstance();
-  static DataConfig* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-#if !PROTOBUF_INLINE_NOT_IN_HEADERS
-// DataConfig
-
-// required bool enablePosition = 1;
-inline bool DataConfig::has_enableposition() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void DataConfig::set_has_enableposition() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void DataConfig::clear_has_enableposition() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void DataConfig::clear_enableposition() {
-  enableposition_ = false;
-  clear_has_enableposition();
-}
-inline bool DataConfig::enableposition() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enablePosition)
-  return enableposition_;
-}
-inline void DataConfig::set_enableposition(bool value) {
-  set_has_enableposition();
-  enableposition_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enablePosition)
-}
-
-// required bool enableOrientation = 2;
-inline bool DataConfig::has_enableorientation() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void DataConfig::set_has_enableorientation() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void DataConfig::clear_has_enableorientation() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void DataConfig::clear_enableorientation() {
-  enableorientation_ = false;
-  clear_has_enableorientation();
-}
-inline bool DataConfig::enableorientation() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enableOrientation)
-  return enableorientation_;
-}
-inline void DataConfig::set_enableorientation(bool value) {
-  set_has_enableorientation();
-  enableorientation_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enableOrientation)
-}
-
-// required bool enableTwistLinear = 3;
-inline bool DataConfig::has_enabletwistlinear() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void DataConfig::set_has_enabletwistlinear() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void DataConfig::clear_has_enabletwistlinear() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void DataConfig::clear_enabletwistlinear() {
-  enabletwistlinear_ = false;
-  clear_has_enabletwistlinear();
-}
-inline bool DataConfig::enabletwistlinear() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enableTwistLinear)
-  return enabletwistlinear_;
-}
-inline void DataConfig::set_enabletwistlinear(bool value) {
-  set_has_enabletwistlinear();
-  enabletwistlinear_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enableTwistLinear)
-}
-
-// required bool enableTwistAngular = 4;
-inline bool DataConfig::has_enabletwistangular() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-inline void DataConfig::set_has_enabletwistangular() {
-  _has_bits_[0] |= 0x00000008u;
-}
-inline void DataConfig::clear_has_enabletwistangular() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-inline void DataConfig::clear_enabletwistangular() {
-  enabletwistangular_ = false;
-  clear_has_enabletwistangular();
-}
-inline bool DataConfig::enabletwistangular() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.enableTwistAngular)
-  return enabletwistangular_;
-}
-inline void DataConfig::set_enabletwistangular(bool value) {
-  set_has_enabletwistangular();
-  enabletwistangular_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.enableTwistAngular)
-}
-
-// required int32 publishRate = 5;
-inline bool DataConfig::has_publishrate() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
-}
-inline void DataConfig::set_has_publishrate() {
-  _has_bits_[0] |= 0x00000010u;
-}
-inline void DataConfig::clear_has_publishrate() {
-  _has_bits_[0] &= ~0x00000010u;
-}
-inline void DataConfig::clear_publishrate() {
-  publishrate_ = 0;
-  clear_has_publishrate();
-}
-inline ::google::protobuf::int32 DataConfig::publishrate() const {
-  // @@protoc_insertion_point(field_get:config.DataConfig.publishRate)
-  return publishrate_;
-}
-inline void DataConfig::set_publishrate(::google::protobuf::int32 value) {
-  set_has_publishrate();
-  publishrate_ = value;
-  // @@protoc_insertion_point(field_set:config.DataConfig.publishRate)
-}
-
-#endif  // !PROTOBUF_INLINE_NOT_IN_HEADERS
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace config
-
-// @@protoc_insertion_point(global_scope)
-
-#endif  // PROTOBUF_dataconfig_2eproto__INCLUDED
diff --git a/src/messages/linkstate.pb.cc b/src/messages/linkstate.pb.cc
deleted file mode 100644
index 5532aae..0000000
--- a/src/messages/linkstate.pb.cc
+++ /dev/null
@@ -1,2693 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: linkstate.proto
-
-#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
-#include "linkstate.pb.h"
-
-#include <algorithm>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/stubs/port.h>
-#include <google/protobuf/stubs/once.h>
-#include <google/protobuf/io/coded_stream.h>
-#include <google/protobuf/wire_format_lite_inl.h>
-#include <google/protobuf/descriptor.h>
-#include <google/protobuf/generated_message_reflection.h>
-#include <google/protobuf/reflection_ops.h>
-#include <google/protobuf/wire_format.h>
-// @@protoc_insertion_point(includes)
-
-namespace panda {
-
-namespace {
-
-const ::google::protobuf::Descriptor* PandaLinkState_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  PandaLinkState_reflection_ = NULL;
-const ::google::protobuf::Descriptor* PandaLinkState_Position_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  PandaLinkState_Position_reflection_ = NULL;
-const ::google::protobuf::Descriptor* PandaLinkState_Orientation_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  PandaLinkState_Orientation_reflection_ = NULL;
-const ::google::protobuf::Descriptor* PandaLinkState_TwistLinear_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  PandaLinkState_TwistLinear_reflection_ = NULL;
-const ::google::protobuf::Descriptor* PandaLinkState_TwistAngular_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  PandaLinkState_TwistAngular_reflection_ = NULL;
-
-}  // namespace
-
-
-void protobuf_AssignDesc_linkstate_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AssignDesc_linkstate_2eproto() {
-  protobuf_AddDesc_linkstate_2eproto();
-  const ::google::protobuf::FileDescriptor* file =
-    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
-      "linkstate.proto");
-  GOOGLE_CHECK(file != NULL);
-  PandaLinkState_descriptor_ = file->message_type(0);
-  static const int PandaLinkState_offsets_[5] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, name_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, pos_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, orient_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, tl_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, ta_),
-  };
-  PandaLinkState_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      PandaLinkState_descriptor_,
-      PandaLinkState::default_instance_,
-      PandaLinkState_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(PandaLinkState),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState, _internal_metadata_),
-      -1);
-  PandaLinkState_Position_descriptor_ = PandaLinkState_descriptor_->nested_type(0);
-  static const int PandaLinkState_Position_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Position, positionx_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Position, positiony_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Position, positionz_),
-  };
-  PandaLinkState_Position_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      PandaLinkState_Position_descriptor_,
-      PandaLinkState_Position::default_instance_,
-      PandaLinkState_Position_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Position, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(PandaLinkState_Position),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Position, _internal_metadata_),
-      -1);
-  PandaLinkState_Orientation_descriptor_ = PandaLinkState_descriptor_->nested_type(1);
-  static const int PandaLinkState_Orientation_offsets_[4] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Orientation, orientationx_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Orientation, orientationy_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Orientation, orientationz_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Orientation, orientationw_),
-  };
-  PandaLinkState_Orientation_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      PandaLinkState_Orientation_descriptor_,
-      PandaLinkState_Orientation::default_instance_,
-      PandaLinkState_Orientation_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Orientation, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(PandaLinkState_Orientation),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_Orientation, _internal_metadata_),
-      -1);
-  PandaLinkState_TwistLinear_descriptor_ = PandaLinkState_descriptor_->nested_type(2);
-  static const int PandaLinkState_TwistLinear_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistLinear, twistlinearx_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistLinear, twistlineary_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistLinear, twistlinearz_),
-  };
-  PandaLinkState_TwistLinear_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      PandaLinkState_TwistLinear_descriptor_,
-      PandaLinkState_TwistLinear::default_instance_,
-      PandaLinkState_TwistLinear_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistLinear, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(PandaLinkState_TwistLinear),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistLinear, _internal_metadata_),
-      -1);
-  PandaLinkState_TwistAngular_descriptor_ = PandaLinkState_descriptor_->nested_type(3);
-  static const int PandaLinkState_TwistAngular_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistAngular, twistangularx_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistAngular, twistangulary_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistAngular, twistangularz_),
-  };
-  PandaLinkState_TwistAngular_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      PandaLinkState_TwistAngular_descriptor_,
-      PandaLinkState_TwistAngular::default_instance_,
-      PandaLinkState_TwistAngular_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistAngular, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(PandaLinkState_TwistAngular),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PandaLinkState_TwistAngular, _internal_metadata_),
-      -1);
-}
-
-namespace {
-
-GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
-inline void protobuf_AssignDescriptorsOnce() {
-  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
-                 &protobuf_AssignDesc_linkstate_2eproto);
-}
-
-void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD;
-void protobuf_RegisterTypes(const ::std::string&) {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      PandaLinkState_descriptor_, &PandaLinkState::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      PandaLinkState_Position_descriptor_, &PandaLinkState_Position::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      PandaLinkState_Orientation_descriptor_, &PandaLinkState_Orientation::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      PandaLinkState_TwistLinear_descriptor_, &PandaLinkState_TwistLinear::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      PandaLinkState_TwistAngular_descriptor_, &PandaLinkState_TwistAngular::default_instance());
-}
-
-}  // namespace
-
-void protobuf_ShutdownFile_linkstate_2eproto() {
-  delete PandaLinkState::default_instance_;
-  delete PandaLinkState_reflection_;
-  delete PandaLinkState_Position::default_instance_;
-  delete PandaLinkState_Position_reflection_;
-  delete PandaLinkState_Orientation::default_instance_;
-  delete PandaLinkState_Orientation_reflection_;
-  delete PandaLinkState_TwistLinear::default_instance_;
-  delete PandaLinkState_TwistLinear_reflection_;
-  delete PandaLinkState_TwistAngular::default_instance_;
-  delete PandaLinkState_TwistAngular_reflection_;
-}
-
-void protobuf_AddDesc_linkstate_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AddDesc_linkstate_2eproto() {
-  static bool already_here = false;
-  if (already_here) return;
-  already_here = true;
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-    "\n\017linkstate.proto\022\005panda\"\257\004\n\016PandaLinkSt"
-    "ate\022\014\n\004name\030\001 \002(\t\022+\n\003pos\030\002 \001(\0132\036.panda.P"
-    "andaLinkState.Position\0221\n\006orient\030\003 \001(\0132!"
-    ".panda.PandaLinkState.Orientation\022-\n\002tl\030"
-    "\004 \001(\0132!.panda.PandaLinkState.TwistLinear"
-    "\022.\n\002ta\030\005 \001(\0132\".panda.PandaLinkState.Twis"
-    "tAngular\032C\n\010Position\022\021\n\tpositionX\030\001 \002(\002\022"
-    "\021\n\tpositionY\030\002 \002(\002\022\021\n\tpositionZ\030\003 \002(\002\032e\n"
-    "\013Orientation\022\024\n\014orientationX\030\001 \002(\002\022\024\n\014or"
-    "ientationY\030\002 \002(\002\022\024\n\014orientationZ\030\003 \002(\002\022\024"
-    "\n\014orientationW\030\004 \002(\002\032O\n\013TwistLinear\022\024\n\014t"
-    "wistLinearX\030\001 \002(\002\022\024\n\014twistLinearY\030\002 \002(\002\022"
-    "\024\n\014twistLinearZ\030\003 \002(\002\032S\n\014TwistAngular\022\025\n"
-    "\rtwistAngularX\030\001 \002(\002\022\025\n\rtwistAngularY\030\002 "
-    "\002(\002\022\025\n\rtwistAngularZ\030\003 \002(\002", 586);
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
-    "linkstate.proto", &protobuf_RegisterTypes);
-  PandaLinkState::default_instance_ = new PandaLinkState();
-  PandaLinkState_Position::default_instance_ = new PandaLinkState_Position();
-  PandaLinkState_Orientation::default_instance_ = new PandaLinkState_Orientation();
-  PandaLinkState_TwistLinear::default_instance_ = new PandaLinkState_TwistLinear();
-  PandaLinkState_TwistAngular::default_instance_ = new PandaLinkState_TwistAngular();
-  PandaLinkState::default_instance_->InitAsDefaultInstance();
-  PandaLinkState_Position::default_instance_->InitAsDefaultInstance();
-  PandaLinkState_Orientation::default_instance_->InitAsDefaultInstance();
-  PandaLinkState_TwistLinear::default_instance_->InitAsDefaultInstance();
-  PandaLinkState_TwistAngular::default_instance_->InitAsDefaultInstance();
-  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_linkstate_2eproto);
-}
-
-// Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_linkstate_2eproto {
-  StaticDescriptorInitializer_linkstate_2eproto() {
-    protobuf_AddDesc_linkstate_2eproto();
-  }
-} static_descriptor_initializer_linkstate_2eproto_;
-
-// ===================================================================
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int PandaLinkState_Position::kPositionXFieldNumber;
-const int PandaLinkState_Position::kPositionYFieldNumber;
-const int PandaLinkState_Position::kPositionZFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-PandaLinkState_Position::PandaLinkState_Position()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:panda.PandaLinkState.Position)
-}
-
-void PandaLinkState_Position::InitAsDefaultInstance() {
-}
-
-PandaLinkState_Position::PandaLinkState_Position(const PandaLinkState_Position& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:panda.PandaLinkState.Position)
-}
-
-void PandaLinkState_Position::SharedCtor() {
-  _cached_size_ = 0;
-  positionx_ = 0;
-  positiony_ = 0;
-  positionz_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-PandaLinkState_Position::~PandaLinkState_Position() {
-  // @@protoc_insertion_point(destructor:panda.PandaLinkState.Position)
-  SharedDtor();
-}
-
-void PandaLinkState_Position::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void PandaLinkState_Position::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* PandaLinkState_Position::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return PandaLinkState_Position_descriptor_;
-}
-
-const PandaLinkState_Position& PandaLinkState_Position::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_linkstate_2eproto();
-  return *default_instance_;
-}
-
-PandaLinkState_Position* PandaLinkState_Position::default_instance_ = NULL;
-
-PandaLinkState_Position* PandaLinkState_Position::New(::google::protobuf::Arena* arena) const {
-  PandaLinkState_Position* n = new PandaLinkState_Position;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void PandaLinkState_Position::Clear() {
-// @@protoc_insertion_point(message_clear_start:panda.PandaLinkState.Position)
-#if defined(__clang__)
-#define ZR_HELPER_(f) \
-  _Pragma("clang diagnostic push") \
-  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
-  __builtin_offsetof(PandaLinkState_Position, f) \
-  _Pragma("clang diagnostic pop")
-#else
-#define ZR_HELPER_(f) reinterpret_cast<char*>(\
-  &reinterpret_cast<PandaLinkState_Position*>(16)->f)
-#endif
-
-#define ZR_(first, last) do {\
-  ::memset(&first, 0,\
-           ZR_HELPER_(last) - ZR_HELPER_(first) + sizeof(last));\
-} while (0)
-
-  ZR_(positionx_, positionz_);
-
-#undef ZR_HELPER_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool PandaLinkState_Position::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:panda.PandaLinkState.Position)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required float positionX = 1;
-      case 1: {
-        if (tag == 13) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &positionx_)));
-          set_has_positionx();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(21)) goto parse_positionY;
-        break;
-      }
-
-      // required float positionY = 2;
-      case 2: {
-        if (tag == 21) {
-         parse_positionY:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &positiony_)));
-          set_has_positiony();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(29)) goto parse_positionZ;
-        break;
-      }
-
-      // required float positionZ = 3;
-      case 3: {
-        if (tag == 29) {
-         parse_positionZ:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &positionz_)));
-          set_has_positionz();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:panda.PandaLinkState.Position)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:panda.PandaLinkState.Position)
-  return false;
-#undef DO_
-}
-
-void PandaLinkState_Position::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:panda.PandaLinkState.Position)
-  // required float positionX = 1;
-  if (has_positionx()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(1, this->positionx(), output);
-  }
-
-  // required float positionY = 2;
-  if (has_positiony()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(2, this->positiony(), output);
-  }
-
-  // required float positionZ = 3;
-  if (has_positionz()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(3, this->positionz(), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:panda.PandaLinkState.Position)
-}
-
-::google::protobuf::uint8* PandaLinkState_Position::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:panda.PandaLinkState.Position)
-  // required float positionX = 1;
-  if (has_positionx()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(1, this->positionx(), target);
-  }
-
-  // required float positionY = 2;
-  if (has_positiony()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(2, this->positiony(), target);
-  }
-
-  // required float positionZ = 3;
-  if (has_positionz()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(3, this->positionz(), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:panda.PandaLinkState.Position)
-  return target;
-}
-
-int PandaLinkState_Position::RequiredFieldsByteSizeFallback() const {
-// @@protoc_insertion_point(required_fields_byte_size_fallback_start:panda.PandaLinkState.Position)
-  int total_size = 0;
-
-  if (has_positionx()) {
-    // required float positionX = 1;
-    total_size += 1 + 4;
-  }
-
-  if (has_positiony()) {
-    // required float positionY = 2;
-    total_size += 1 + 4;
-  }
-
-  if (has_positionz()) {
-    // required float positionZ = 3;
-    total_size += 1 + 4;
-  }
-
-  return total_size;
-}
-int PandaLinkState_Position::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:panda.PandaLinkState.Position)
-  int total_size = 0;
-
-  if (((_has_bits_[0] & 0x00000007) ^ 0x00000007) == 0) {  // All required fields are present.
-    // required float positionX = 1;
-    total_size += 1 + 4;
-
-    // required float positionY = 2;
-    total_size += 1 + 4;
-
-    // required float positionZ = 3;
-    total_size += 1 + 4;
-
-  } else {
-    total_size += RequiredFieldsByteSizeFallback();
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 PandaLinkState_Position::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:panda.PandaLinkState.Position)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const PandaLinkState_Position* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const PandaLinkState_Position>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:panda.PandaLinkState.Position)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:panda.PandaLinkState.Position)
-    MergeFrom(*source);
-  }
-}
-
-void PandaLinkState_Position::MergeFrom(const PandaLinkState_Position& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:panda.PandaLinkState.Position)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_positionx()) {
-      set_positionx(from.positionx());
-    }
-    if (from.has_positiony()) {
-      set_positiony(from.positiony());
-    }
-    if (from.has_positionz()) {
-      set_positionz(from.positionz());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void PandaLinkState_Position::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:panda.PandaLinkState.Position)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void PandaLinkState_Position::CopyFrom(const PandaLinkState_Position& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:panda.PandaLinkState.Position)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool PandaLinkState_Position::IsInitialized() const {
-  if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false;
-
-  return true;
-}
-
-void PandaLinkState_Position::Swap(PandaLinkState_Position* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void PandaLinkState_Position::InternalSwap(PandaLinkState_Position* other) {
-  std::swap(positionx_, other->positionx_);
-  std::swap(positiony_, other->positiony_);
-  std::swap(positionz_, other->positionz_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata PandaLinkState_Position::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = PandaLinkState_Position_descriptor_;
-  metadata.reflection = PandaLinkState_Position_reflection_;
-  return metadata;
-}
-
-
-// -------------------------------------------------------------------
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int PandaLinkState_Orientation::kOrientationXFieldNumber;
-const int PandaLinkState_Orientation::kOrientationYFieldNumber;
-const int PandaLinkState_Orientation::kOrientationZFieldNumber;
-const int PandaLinkState_Orientation::kOrientationWFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-PandaLinkState_Orientation::PandaLinkState_Orientation()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:panda.PandaLinkState.Orientation)
-}
-
-void PandaLinkState_Orientation::InitAsDefaultInstance() {
-}
-
-PandaLinkState_Orientation::PandaLinkState_Orientation(const PandaLinkState_Orientation& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:panda.PandaLinkState.Orientation)
-}
-
-void PandaLinkState_Orientation::SharedCtor() {
-  _cached_size_ = 0;
-  orientationx_ = 0;
-  orientationy_ = 0;
-  orientationz_ = 0;
-  orientationw_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-PandaLinkState_Orientation::~PandaLinkState_Orientation() {
-  // @@protoc_insertion_point(destructor:panda.PandaLinkState.Orientation)
-  SharedDtor();
-}
-
-void PandaLinkState_Orientation::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void PandaLinkState_Orientation::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* PandaLinkState_Orientation::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return PandaLinkState_Orientation_descriptor_;
-}
-
-const PandaLinkState_Orientation& PandaLinkState_Orientation::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_linkstate_2eproto();
-  return *default_instance_;
-}
-
-PandaLinkState_Orientation* PandaLinkState_Orientation::default_instance_ = NULL;
-
-PandaLinkState_Orientation* PandaLinkState_Orientation::New(::google::protobuf::Arena* arena) const {
-  PandaLinkState_Orientation* n = new PandaLinkState_Orientation;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void PandaLinkState_Orientation::Clear() {
-// @@protoc_insertion_point(message_clear_start:panda.PandaLinkState.Orientation)
-#if defined(__clang__)
-#define ZR_HELPER_(f) \
-  _Pragma("clang diagnostic push") \
-  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
-  __builtin_offsetof(PandaLinkState_Orientation, f) \
-  _Pragma("clang diagnostic pop")
-#else
-#define ZR_HELPER_(f) reinterpret_cast<char*>(\
-  &reinterpret_cast<PandaLinkState_Orientation*>(16)->f)
-#endif
-
-#define ZR_(first, last) do {\
-  ::memset(&first, 0,\
-           ZR_HELPER_(last) - ZR_HELPER_(first) + sizeof(last));\
-} while (0)
-
-  ZR_(orientationx_, orientationw_);
-
-#undef ZR_HELPER_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool PandaLinkState_Orientation::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:panda.PandaLinkState.Orientation)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required float orientationX = 1;
-      case 1: {
-        if (tag == 13) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &orientationx_)));
-          set_has_orientationx();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(21)) goto parse_orientationY;
-        break;
-      }
-
-      // required float orientationY = 2;
-      case 2: {
-        if (tag == 21) {
-         parse_orientationY:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &orientationy_)));
-          set_has_orientationy();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(29)) goto parse_orientationZ;
-        break;
-      }
-
-      // required float orientationZ = 3;
-      case 3: {
-        if (tag == 29) {
-         parse_orientationZ:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &orientationz_)));
-          set_has_orientationz();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(37)) goto parse_orientationW;
-        break;
-      }
-
-      // required float orientationW = 4;
-      case 4: {
-        if (tag == 37) {
-         parse_orientationW:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &orientationw_)));
-          set_has_orientationw();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:panda.PandaLinkState.Orientation)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:panda.PandaLinkState.Orientation)
-  return false;
-#undef DO_
-}
-
-void PandaLinkState_Orientation::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:panda.PandaLinkState.Orientation)
-  // required float orientationX = 1;
-  if (has_orientationx()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(1, this->orientationx(), output);
-  }
-
-  // required float orientationY = 2;
-  if (has_orientationy()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(2, this->orientationy(), output);
-  }
-
-  // required float orientationZ = 3;
-  if (has_orientationz()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(3, this->orientationz(), output);
-  }
-
-  // required float orientationW = 4;
-  if (has_orientationw()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(4, this->orientationw(), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:panda.PandaLinkState.Orientation)
-}
-
-::google::protobuf::uint8* PandaLinkState_Orientation::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:panda.PandaLinkState.Orientation)
-  // required float orientationX = 1;
-  if (has_orientationx()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(1, this->orientationx(), target);
-  }
-
-  // required float orientationY = 2;
-  if (has_orientationy()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(2, this->orientationy(), target);
-  }
-
-  // required float orientationZ = 3;
-  if (has_orientationz()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(3, this->orientationz(), target);
-  }
-
-  // required float orientationW = 4;
-  if (has_orientationw()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(4, this->orientationw(), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:panda.PandaLinkState.Orientation)
-  return target;
-}
-
-int PandaLinkState_Orientation::RequiredFieldsByteSizeFallback() const {
-// @@protoc_insertion_point(required_fields_byte_size_fallback_start:panda.PandaLinkState.Orientation)
-  int total_size = 0;
-
-  if (has_orientationx()) {
-    // required float orientationX = 1;
-    total_size += 1 + 4;
-  }
-
-  if (has_orientationy()) {
-    // required float orientationY = 2;
-    total_size += 1 + 4;
-  }
-
-  if (has_orientationz()) {
-    // required float orientationZ = 3;
-    total_size += 1 + 4;
-  }
-
-  if (has_orientationw()) {
-    // required float orientationW = 4;
-    total_size += 1 + 4;
-  }
-
-  return total_size;
-}
-int PandaLinkState_Orientation::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:panda.PandaLinkState.Orientation)
-  int total_size = 0;
-
-  if (((_has_bits_[0] & 0x0000000f) ^ 0x0000000f) == 0) {  // All required fields are present.
-    // required float orientationX = 1;
-    total_size += 1 + 4;
-
-    // required float orientationY = 2;
-    total_size += 1 + 4;
-
-    // required float orientationZ = 3;
-    total_size += 1 + 4;
-
-    // required float orientationW = 4;
-    total_size += 1 + 4;
-
-  } else {
-    total_size += RequiredFieldsByteSizeFallback();
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 PandaLinkState_Orientation::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:panda.PandaLinkState.Orientation)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const PandaLinkState_Orientation* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const PandaLinkState_Orientation>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:panda.PandaLinkState.Orientation)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:panda.PandaLinkState.Orientation)
-    MergeFrom(*source);
-  }
-}
-
-void PandaLinkState_Orientation::MergeFrom(const PandaLinkState_Orientation& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:panda.PandaLinkState.Orientation)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_orientationx()) {
-      set_orientationx(from.orientationx());
-    }
-    if (from.has_orientationy()) {
-      set_orientationy(from.orientationy());
-    }
-    if (from.has_orientationz()) {
-      set_orientationz(from.orientationz());
-    }
-    if (from.has_orientationw()) {
-      set_orientationw(from.orientationw());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void PandaLinkState_Orientation::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:panda.PandaLinkState.Orientation)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void PandaLinkState_Orientation::CopyFrom(const PandaLinkState_Orientation& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:panda.PandaLinkState.Orientation)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool PandaLinkState_Orientation::IsInitialized() const {
-  if ((_has_bits_[0] & 0x0000000f) != 0x0000000f) return false;
-
-  return true;
-}
-
-void PandaLinkState_Orientation::Swap(PandaLinkState_Orientation* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void PandaLinkState_Orientation::InternalSwap(PandaLinkState_Orientation* other) {
-  std::swap(orientationx_, other->orientationx_);
-  std::swap(orientationy_, other->orientationy_);
-  std::swap(orientationz_, other->orientationz_);
-  std::swap(orientationw_, other->orientationw_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata PandaLinkState_Orientation::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = PandaLinkState_Orientation_descriptor_;
-  metadata.reflection = PandaLinkState_Orientation_reflection_;
-  return metadata;
-}
-
-
-// -------------------------------------------------------------------
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int PandaLinkState_TwistLinear::kTwistLinearXFieldNumber;
-const int PandaLinkState_TwistLinear::kTwistLinearYFieldNumber;
-const int PandaLinkState_TwistLinear::kTwistLinearZFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-PandaLinkState_TwistLinear::PandaLinkState_TwistLinear()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:panda.PandaLinkState.TwistLinear)
-}
-
-void PandaLinkState_TwistLinear::InitAsDefaultInstance() {
-}
-
-PandaLinkState_TwistLinear::PandaLinkState_TwistLinear(const PandaLinkState_TwistLinear& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:panda.PandaLinkState.TwistLinear)
-}
-
-void PandaLinkState_TwistLinear::SharedCtor() {
-  _cached_size_ = 0;
-  twistlinearx_ = 0;
-  twistlineary_ = 0;
-  twistlinearz_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-PandaLinkState_TwistLinear::~PandaLinkState_TwistLinear() {
-  // @@protoc_insertion_point(destructor:panda.PandaLinkState.TwistLinear)
-  SharedDtor();
-}
-
-void PandaLinkState_TwistLinear::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void PandaLinkState_TwistLinear::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* PandaLinkState_TwistLinear::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return PandaLinkState_TwistLinear_descriptor_;
-}
-
-const PandaLinkState_TwistLinear& PandaLinkState_TwistLinear::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_linkstate_2eproto();
-  return *default_instance_;
-}
-
-PandaLinkState_TwistLinear* PandaLinkState_TwistLinear::default_instance_ = NULL;
-
-PandaLinkState_TwistLinear* PandaLinkState_TwistLinear::New(::google::protobuf::Arena* arena) const {
-  PandaLinkState_TwistLinear* n = new PandaLinkState_TwistLinear;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void PandaLinkState_TwistLinear::Clear() {
-// @@protoc_insertion_point(message_clear_start:panda.PandaLinkState.TwistLinear)
-#if defined(__clang__)
-#define ZR_HELPER_(f) \
-  _Pragma("clang diagnostic push") \
-  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
-  __builtin_offsetof(PandaLinkState_TwistLinear, f) \
-  _Pragma("clang diagnostic pop")
-#else
-#define ZR_HELPER_(f) reinterpret_cast<char*>(\
-  &reinterpret_cast<PandaLinkState_TwistLinear*>(16)->f)
-#endif
-
-#define ZR_(first, last) do {\
-  ::memset(&first, 0,\
-           ZR_HELPER_(last) - ZR_HELPER_(first) + sizeof(last));\
-} while (0)
-
-  ZR_(twistlinearx_, twistlinearz_);
-
-#undef ZR_HELPER_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool PandaLinkState_TwistLinear::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:panda.PandaLinkState.TwistLinear)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required float twistLinearX = 1;
-      case 1: {
-        if (tag == 13) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &twistlinearx_)));
-          set_has_twistlinearx();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(21)) goto parse_twistLinearY;
-        break;
-      }
-
-      // required float twistLinearY = 2;
-      case 2: {
-        if (tag == 21) {
-         parse_twistLinearY:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &twistlineary_)));
-          set_has_twistlineary();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(29)) goto parse_twistLinearZ;
-        break;
-      }
-
-      // required float twistLinearZ = 3;
-      case 3: {
-        if (tag == 29) {
-         parse_twistLinearZ:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &twistlinearz_)));
-          set_has_twistlinearz();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:panda.PandaLinkState.TwistLinear)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:panda.PandaLinkState.TwistLinear)
-  return false;
-#undef DO_
-}
-
-void PandaLinkState_TwistLinear::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:panda.PandaLinkState.TwistLinear)
-  // required float twistLinearX = 1;
-  if (has_twistlinearx()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(1, this->twistlinearx(), output);
-  }
-
-  // required float twistLinearY = 2;
-  if (has_twistlineary()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(2, this->twistlineary(), output);
-  }
-
-  // required float twistLinearZ = 3;
-  if (has_twistlinearz()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(3, this->twistlinearz(), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:panda.PandaLinkState.TwistLinear)
-}
-
-::google::protobuf::uint8* PandaLinkState_TwistLinear::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:panda.PandaLinkState.TwistLinear)
-  // required float twistLinearX = 1;
-  if (has_twistlinearx()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(1, this->twistlinearx(), target);
-  }
-
-  // required float twistLinearY = 2;
-  if (has_twistlineary()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(2, this->twistlineary(), target);
-  }
-
-  // required float twistLinearZ = 3;
-  if (has_twistlinearz()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(3, this->twistlinearz(), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:panda.PandaLinkState.TwistLinear)
-  return target;
-}
-
-int PandaLinkState_TwistLinear::RequiredFieldsByteSizeFallback() const {
-// @@protoc_insertion_point(required_fields_byte_size_fallback_start:panda.PandaLinkState.TwistLinear)
-  int total_size = 0;
-
-  if (has_twistlinearx()) {
-    // required float twistLinearX = 1;
-    total_size += 1 + 4;
-  }
-
-  if (has_twistlineary()) {
-    // required float twistLinearY = 2;
-    total_size += 1 + 4;
-  }
-
-  if (has_twistlinearz()) {
-    // required float twistLinearZ = 3;
-    total_size += 1 + 4;
-  }
-
-  return total_size;
-}
-int PandaLinkState_TwistLinear::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:panda.PandaLinkState.TwistLinear)
-  int total_size = 0;
-
-  if (((_has_bits_[0] & 0x00000007) ^ 0x00000007) == 0) {  // All required fields are present.
-    // required float twistLinearX = 1;
-    total_size += 1 + 4;
-
-    // required float twistLinearY = 2;
-    total_size += 1 + 4;
-
-    // required float twistLinearZ = 3;
-    total_size += 1 + 4;
-
-  } else {
-    total_size += RequiredFieldsByteSizeFallback();
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 PandaLinkState_TwistLinear::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:panda.PandaLinkState.TwistLinear)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const PandaLinkState_TwistLinear* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const PandaLinkState_TwistLinear>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:panda.PandaLinkState.TwistLinear)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:panda.PandaLinkState.TwistLinear)
-    MergeFrom(*source);
-  }
-}
-
-void PandaLinkState_TwistLinear::MergeFrom(const PandaLinkState_TwistLinear& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:panda.PandaLinkState.TwistLinear)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_twistlinearx()) {
-      set_twistlinearx(from.twistlinearx());
-    }
-    if (from.has_twistlineary()) {
-      set_twistlineary(from.twistlineary());
-    }
-    if (from.has_twistlinearz()) {
-      set_twistlinearz(from.twistlinearz());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void PandaLinkState_TwistLinear::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:panda.PandaLinkState.TwistLinear)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void PandaLinkState_TwistLinear::CopyFrom(const PandaLinkState_TwistLinear& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:panda.PandaLinkState.TwistLinear)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool PandaLinkState_TwistLinear::IsInitialized() const {
-  if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false;
-
-  return true;
-}
-
-void PandaLinkState_TwistLinear::Swap(PandaLinkState_TwistLinear* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void PandaLinkState_TwistLinear::InternalSwap(PandaLinkState_TwistLinear* other) {
-  std::swap(twistlinearx_, other->twistlinearx_);
-  std::swap(twistlineary_, other->twistlineary_);
-  std::swap(twistlinearz_, other->twistlinearz_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata PandaLinkState_TwistLinear::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = PandaLinkState_TwistLinear_descriptor_;
-  metadata.reflection = PandaLinkState_TwistLinear_reflection_;
-  return metadata;
-}
-
-
-// -------------------------------------------------------------------
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int PandaLinkState_TwistAngular::kTwistAngularXFieldNumber;
-const int PandaLinkState_TwistAngular::kTwistAngularYFieldNumber;
-const int PandaLinkState_TwistAngular::kTwistAngularZFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-PandaLinkState_TwistAngular::PandaLinkState_TwistAngular()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:panda.PandaLinkState.TwistAngular)
-}
-
-void PandaLinkState_TwistAngular::InitAsDefaultInstance() {
-}
-
-PandaLinkState_TwistAngular::PandaLinkState_TwistAngular(const PandaLinkState_TwistAngular& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:panda.PandaLinkState.TwistAngular)
-}
-
-void PandaLinkState_TwistAngular::SharedCtor() {
-  _cached_size_ = 0;
-  twistangularx_ = 0;
-  twistangulary_ = 0;
-  twistangularz_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-PandaLinkState_TwistAngular::~PandaLinkState_TwistAngular() {
-  // @@protoc_insertion_point(destructor:panda.PandaLinkState.TwistAngular)
-  SharedDtor();
-}
-
-void PandaLinkState_TwistAngular::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void PandaLinkState_TwistAngular::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* PandaLinkState_TwistAngular::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return PandaLinkState_TwistAngular_descriptor_;
-}
-
-const PandaLinkState_TwistAngular& PandaLinkState_TwistAngular::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_linkstate_2eproto();
-  return *default_instance_;
-}
-
-PandaLinkState_TwistAngular* PandaLinkState_TwistAngular::default_instance_ = NULL;
-
-PandaLinkState_TwistAngular* PandaLinkState_TwistAngular::New(::google::protobuf::Arena* arena) const {
-  PandaLinkState_TwistAngular* n = new PandaLinkState_TwistAngular;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void PandaLinkState_TwistAngular::Clear() {
-// @@protoc_insertion_point(message_clear_start:panda.PandaLinkState.TwistAngular)
-#if defined(__clang__)
-#define ZR_HELPER_(f) \
-  _Pragma("clang diagnostic push") \
-  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
-  __builtin_offsetof(PandaLinkState_TwistAngular, f) \
-  _Pragma("clang diagnostic pop")
-#else
-#define ZR_HELPER_(f) reinterpret_cast<char*>(\
-  &reinterpret_cast<PandaLinkState_TwistAngular*>(16)->f)
-#endif
-
-#define ZR_(first, last) do {\
-  ::memset(&first, 0,\
-           ZR_HELPER_(last) - ZR_HELPER_(first) + sizeof(last));\
-} while (0)
-
-  ZR_(twistangularx_, twistangularz_);
-
-#undef ZR_HELPER_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool PandaLinkState_TwistAngular::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:panda.PandaLinkState.TwistAngular)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required float twistAngularX = 1;
-      case 1: {
-        if (tag == 13) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &twistangularx_)));
-          set_has_twistangularx();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(21)) goto parse_twistAngularY;
-        break;
-      }
-
-      // required float twistAngularY = 2;
-      case 2: {
-        if (tag == 21) {
-         parse_twistAngularY:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &twistangulary_)));
-          set_has_twistangulary();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(29)) goto parse_twistAngularZ;
-        break;
-      }
-
-      // required float twistAngularZ = 3;
-      case 3: {
-        if (tag == 29) {
-         parse_twistAngularZ:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
-                 input, &twistangularz_)));
-          set_has_twistangularz();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:panda.PandaLinkState.TwistAngular)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:panda.PandaLinkState.TwistAngular)
-  return false;
-#undef DO_
-}
-
-void PandaLinkState_TwistAngular::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:panda.PandaLinkState.TwistAngular)
-  // required float twistAngularX = 1;
-  if (has_twistangularx()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(1, this->twistangularx(), output);
-  }
-
-  // required float twistAngularY = 2;
-  if (has_twistangulary()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(2, this->twistangulary(), output);
-  }
-
-  // required float twistAngularZ = 3;
-  if (has_twistangularz()) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(3, this->twistangularz(), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:panda.PandaLinkState.TwistAngular)
-}
-
-::google::protobuf::uint8* PandaLinkState_TwistAngular::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:panda.PandaLinkState.TwistAngular)
-  // required float twistAngularX = 1;
-  if (has_twistangularx()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(1, this->twistangularx(), target);
-  }
-
-  // required float twistAngularY = 2;
-  if (has_twistangulary()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(2, this->twistangulary(), target);
-  }
-
-  // required float twistAngularZ = 3;
-  if (has_twistangularz()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(3, this->twistangularz(), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:panda.PandaLinkState.TwistAngular)
-  return target;
-}
-
-int PandaLinkState_TwistAngular::RequiredFieldsByteSizeFallback() const {
-// @@protoc_insertion_point(required_fields_byte_size_fallback_start:panda.PandaLinkState.TwistAngular)
-  int total_size = 0;
-
-  if (has_twistangularx()) {
-    // required float twistAngularX = 1;
-    total_size += 1 + 4;
-  }
-
-  if (has_twistangulary()) {
-    // required float twistAngularY = 2;
-    total_size += 1 + 4;
-  }
-
-  if (has_twistangularz()) {
-    // required float twistAngularZ = 3;
-    total_size += 1 + 4;
-  }
-
-  return total_size;
-}
-int PandaLinkState_TwistAngular::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:panda.PandaLinkState.TwistAngular)
-  int total_size = 0;
-
-  if (((_has_bits_[0] & 0x00000007) ^ 0x00000007) == 0) {  // All required fields are present.
-    // required float twistAngularX = 1;
-    total_size += 1 + 4;
-
-    // required float twistAngularY = 2;
-    total_size += 1 + 4;
-
-    // required float twistAngularZ = 3;
-    total_size += 1 + 4;
-
-  } else {
-    total_size += RequiredFieldsByteSizeFallback();
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 PandaLinkState_TwistAngular::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:panda.PandaLinkState.TwistAngular)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const PandaLinkState_TwistAngular* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const PandaLinkState_TwistAngular>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:panda.PandaLinkState.TwistAngular)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:panda.PandaLinkState.TwistAngular)
-    MergeFrom(*source);
-  }
-}
-
-void PandaLinkState_TwistAngular::MergeFrom(const PandaLinkState_TwistAngular& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:panda.PandaLinkState.TwistAngular)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_twistangularx()) {
-      set_twistangularx(from.twistangularx());
-    }
-    if (from.has_twistangulary()) {
-      set_twistangulary(from.twistangulary());
-    }
-    if (from.has_twistangularz()) {
-      set_twistangularz(from.twistangularz());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void PandaLinkState_TwistAngular::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:panda.PandaLinkState.TwistAngular)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void PandaLinkState_TwistAngular::CopyFrom(const PandaLinkState_TwistAngular& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:panda.PandaLinkState.TwistAngular)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool PandaLinkState_TwistAngular::IsInitialized() const {
-  if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false;
-
-  return true;
-}
-
-void PandaLinkState_TwistAngular::Swap(PandaLinkState_TwistAngular* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void PandaLinkState_TwistAngular::InternalSwap(PandaLinkState_TwistAngular* other) {
-  std::swap(twistangularx_, other->twistangularx_);
-  std::swap(twistangulary_, other->twistangulary_);
-  std::swap(twistangularz_, other->twistangularz_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata PandaLinkState_TwistAngular::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = PandaLinkState_TwistAngular_descriptor_;
-  metadata.reflection = PandaLinkState_TwistAngular_reflection_;
-  return metadata;
-}
-
-
-// -------------------------------------------------------------------
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int PandaLinkState::kNameFieldNumber;
-const int PandaLinkState::kPosFieldNumber;
-const int PandaLinkState::kOrientFieldNumber;
-const int PandaLinkState::kTlFieldNumber;
-const int PandaLinkState::kTaFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-PandaLinkState::PandaLinkState()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:panda.PandaLinkState)
-}
-
-void PandaLinkState::InitAsDefaultInstance() {
-  pos_ = const_cast< ::panda::PandaLinkState_Position*>(&::panda::PandaLinkState_Position::default_instance());
-  orient_ = const_cast< ::panda::PandaLinkState_Orientation*>(&::panda::PandaLinkState_Orientation::default_instance());
-  tl_ = const_cast< ::panda::PandaLinkState_TwistLinear*>(&::panda::PandaLinkState_TwistLinear::default_instance());
-  ta_ = const_cast< ::panda::PandaLinkState_TwistAngular*>(&::panda::PandaLinkState_TwistAngular::default_instance());
-}
-
-PandaLinkState::PandaLinkState(const PandaLinkState& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:panda.PandaLinkState)
-}
-
-void PandaLinkState::SharedCtor() {
-  ::google::protobuf::internal::GetEmptyString();
-  _cached_size_ = 0;
-  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  pos_ = NULL;
-  orient_ = NULL;
-  tl_ = NULL;
-  ta_ = NULL;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-PandaLinkState::~PandaLinkState() {
-  // @@protoc_insertion_point(destructor:panda.PandaLinkState)
-  SharedDtor();
-}
-
-void PandaLinkState::SharedDtor() {
-  name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  if (this != default_instance_) {
-    delete pos_;
-    delete orient_;
-    delete tl_;
-    delete ta_;
-  }
-}
-
-void PandaLinkState::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* PandaLinkState::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return PandaLinkState_descriptor_;
-}
-
-const PandaLinkState& PandaLinkState::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_linkstate_2eproto();
-  return *default_instance_;
-}
-
-PandaLinkState* PandaLinkState::default_instance_ = NULL;
-
-PandaLinkState* PandaLinkState::New(::google::protobuf::Arena* arena) const {
-  PandaLinkState* n = new PandaLinkState;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void PandaLinkState::Clear() {
-// @@protoc_insertion_point(message_clear_start:panda.PandaLinkState)
-  if (_has_bits_[0 / 32] & 31u) {
-    if (has_name()) {
-      name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    }
-    if (has_pos()) {
-      if (pos_ != NULL) pos_->::panda::PandaLinkState_Position::Clear();
-    }
-    if (has_orient()) {
-      if (orient_ != NULL) orient_->::panda::PandaLinkState_Orientation::Clear();
-    }
-    if (has_tl()) {
-      if (tl_ != NULL) tl_->::panda::PandaLinkState_TwistLinear::Clear();
-    }
-    if (has_ta()) {
-      if (ta_ != NULL) ta_->::panda::PandaLinkState_TwistAngular::Clear();
-    }
-  }
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool PandaLinkState::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:panda.PandaLinkState)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required string name = 1;
-      case 1: {
-        if (tag == 10) {
-          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
-                input, this->mutable_name()));
-          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-            this->name().data(), this->name().length(),
-            ::google::protobuf::internal::WireFormat::PARSE,
-            "panda.PandaLinkState.name");
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(18)) goto parse_pos;
-        break;
-      }
-
-      // optional .panda.PandaLinkState.Position pos = 2;
-      case 2: {
-        if (tag == 18) {
-         parse_pos:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_pos()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(26)) goto parse_orient;
-        break;
-      }
-
-      // optional .panda.PandaLinkState.Orientation orient = 3;
-      case 3: {
-        if (tag == 26) {
-         parse_orient:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_orient()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(34)) goto parse_tl;
-        break;
-      }
-
-      // optional .panda.PandaLinkState.TwistLinear tl = 4;
-      case 4: {
-        if (tag == 34) {
-         parse_tl:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_tl()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(42)) goto parse_ta;
-        break;
-      }
-
-      // optional .panda.PandaLinkState.TwistAngular ta = 5;
-      case 5: {
-        if (tag == 42) {
-         parse_ta:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_ta()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:panda.PandaLinkState)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:panda.PandaLinkState)
-  return false;
-#undef DO_
-}
-
-void PandaLinkState::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:panda.PandaLinkState)
-  // required string name = 1;
-  if (has_name()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->name().data(), this->name().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "panda.PandaLinkState.name");
-    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
-      1, this->name(), output);
-  }
-
-  // optional .panda.PandaLinkState.Position pos = 2;
-  if (has_pos()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      2, *this->pos_, output);
-  }
-
-  // optional .panda.PandaLinkState.Orientation orient = 3;
-  if (has_orient()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      3, *this->orient_, output);
-  }
-
-  // optional .panda.PandaLinkState.TwistLinear tl = 4;
-  if (has_tl()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      4, *this->tl_, output);
-  }
-
-  // optional .panda.PandaLinkState.TwistAngular ta = 5;
-  if (has_ta()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      5, *this->ta_, output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:panda.PandaLinkState)
-}
-
-::google::protobuf::uint8* PandaLinkState::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:panda.PandaLinkState)
-  // required string name = 1;
-  if (has_name()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->name().data(), this->name().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "panda.PandaLinkState.name");
-    target =
-      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
-        1, this->name(), target);
-  }
-
-  // optional .panda.PandaLinkState.Position pos = 2;
-  if (has_pos()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageNoVirtualToArray(
-        2, *this->pos_, false, target);
-  }
-
-  // optional .panda.PandaLinkState.Orientation orient = 3;
-  if (has_orient()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageNoVirtualToArray(
-        3, *this->orient_, false, target);
-  }
-
-  // optional .panda.PandaLinkState.TwistLinear tl = 4;
-  if (has_tl()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageNoVirtualToArray(
-        4, *this->tl_, false, target);
-  }
-
-  // optional .panda.PandaLinkState.TwistAngular ta = 5;
-  if (has_ta()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageNoVirtualToArray(
-        5, *this->ta_, false, target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:panda.PandaLinkState)
-  return target;
-}
-
-int PandaLinkState::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:panda.PandaLinkState)
-  int total_size = 0;
-
-  // required string name = 1;
-  if (has_name()) {
-    total_size += 1 +
-      ::google::protobuf::internal::WireFormatLite::StringSize(
-        this->name());
-  }
-  if (_has_bits_[1 / 32] & 30u) {
-    // optional .panda.PandaLinkState.Position pos = 2;
-    if (has_pos()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          *this->pos_);
-    }
-
-    // optional .panda.PandaLinkState.Orientation orient = 3;
-    if (has_orient()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          *this->orient_);
-    }
-
-    // optional .panda.PandaLinkState.TwistLinear tl = 4;
-    if (has_tl()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          *this->tl_);
-    }
-
-    // optional .panda.PandaLinkState.TwistAngular ta = 5;
-    if (has_ta()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          *this->ta_);
-    }
-
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 PandaLinkState::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:panda.PandaLinkState)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const PandaLinkState* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const PandaLinkState>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:panda.PandaLinkState)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:panda.PandaLinkState)
-    MergeFrom(*source);
-  }
-}
-
-void PandaLinkState::MergeFrom(const PandaLinkState& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:panda.PandaLinkState)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_name()) {
-      set_has_name();
-      name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
-    }
-    if (from.has_pos()) {
-      mutable_pos()->::panda::PandaLinkState_Position::MergeFrom(from.pos());
-    }
-    if (from.has_orient()) {
-      mutable_orient()->::panda::PandaLinkState_Orientation::MergeFrom(from.orient());
-    }
-    if (from.has_tl()) {
-      mutable_tl()->::panda::PandaLinkState_TwistLinear::MergeFrom(from.tl());
-    }
-    if (from.has_ta()) {
-      mutable_ta()->::panda::PandaLinkState_TwistAngular::MergeFrom(from.ta());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void PandaLinkState::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:panda.PandaLinkState)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void PandaLinkState::CopyFrom(const PandaLinkState& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:panda.PandaLinkState)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool PandaLinkState::IsInitialized() const {
-  if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
-
-  if (has_pos()) {
-    if (!this->pos_->IsInitialized()) return false;
-  }
-  if (has_orient()) {
-    if (!this->orient_->IsInitialized()) return false;
-  }
-  if (has_tl()) {
-    if (!this->tl_->IsInitialized()) return false;
-  }
-  if (has_ta()) {
-    if (!this->ta_->IsInitialized()) return false;
-  }
-  return true;
-}
-
-void PandaLinkState::Swap(PandaLinkState* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void PandaLinkState::InternalSwap(PandaLinkState* other) {
-  name_.Swap(&other->name_);
-  std::swap(pos_, other->pos_);
-  std::swap(orient_, other->orient_);
-  std::swap(tl_, other->tl_);
-  std::swap(ta_, other->ta_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata PandaLinkState::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = PandaLinkState_descriptor_;
-  metadata.reflection = PandaLinkState_reflection_;
-  return metadata;
-}
-
-#if PROTOBUF_INLINE_NOT_IN_HEADERS
-// PandaLinkState_Position
-
-// required float positionX = 1;
-bool PandaLinkState_Position::has_positionx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void PandaLinkState_Position::set_has_positionx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void PandaLinkState_Position::clear_has_positionx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void PandaLinkState_Position::clear_positionx() {
-  positionx_ = 0;
-  clear_has_positionx();
-}
- float PandaLinkState_Position::positionx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Position.positionX)
-  return positionx_;
-}
- void PandaLinkState_Position::set_positionx(float value) {
-  set_has_positionx();
-  positionx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Position.positionX)
-}
-
-// required float positionY = 2;
-bool PandaLinkState_Position::has_positiony() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-void PandaLinkState_Position::set_has_positiony() {
-  _has_bits_[0] |= 0x00000002u;
-}
-void PandaLinkState_Position::clear_has_positiony() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-void PandaLinkState_Position::clear_positiony() {
-  positiony_ = 0;
-  clear_has_positiony();
-}
- float PandaLinkState_Position::positiony() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Position.positionY)
-  return positiony_;
-}
- void PandaLinkState_Position::set_positiony(float value) {
-  set_has_positiony();
-  positiony_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Position.positionY)
-}
-
-// required float positionZ = 3;
-bool PandaLinkState_Position::has_positionz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-void PandaLinkState_Position::set_has_positionz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-void PandaLinkState_Position::clear_has_positionz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-void PandaLinkState_Position::clear_positionz() {
-  positionz_ = 0;
-  clear_has_positionz();
-}
- float PandaLinkState_Position::positionz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Position.positionZ)
-  return positionz_;
-}
- void PandaLinkState_Position::set_positionz(float value) {
-  set_has_positionz();
-  positionz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Position.positionZ)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState_Orientation
-
-// required float orientationX = 1;
-bool PandaLinkState_Orientation::has_orientationx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void PandaLinkState_Orientation::set_has_orientationx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void PandaLinkState_Orientation::clear_has_orientationx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void PandaLinkState_Orientation::clear_orientationx() {
-  orientationx_ = 0;
-  clear_has_orientationx();
-}
- float PandaLinkState_Orientation::orientationx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationX)
-  return orientationx_;
-}
- void PandaLinkState_Orientation::set_orientationx(float value) {
-  set_has_orientationx();
-  orientationx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationX)
-}
-
-// required float orientationY = 2;
-bool PandaLinkState_Orientation::has_orientationy() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-void PandaLinkState_Orientation::set_has_orientationy() {
-  _has_bits_[0] |= 0x00000002u;
-}
-void PandaLinkState_Orientation::clear_has_orientationy() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-void PandaLinkState_Orientation::clear_orientationy() {
-  orientationy_ = 0;
-  clear_has_orientationy();
-}
- float PandaLinkState_Orientation::orientationy() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationY)
-  return orientationy_;
-}
- void PandaLinkState_Orientation::set_orientationy(float value) {
-  set_has_orientationy();
-  orientationy_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationY)
-}
-
-// required float orientationZ = 3;
-bool PandaLinkState_Orientation::has_orientationz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-void PandaLinkState_Orientation::set_has_orientationz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-void PandaLinkState_Orientation::clear_has_orientationz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-void PandaLinkState_Orientation::clear_orientationz() {
-  orientationz_ = 0;
-  clear_has_orientationz();
-}
- float PandaLinkState_Orientation::orientationz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationZ)
-  return orientationz_;
-}
- void PandaLinkState_Orientation::set_orientationz(float value) {
-  set_has_orientationz();
-  orientationz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationZ)
-}
-
-// required float orientationW = 4;
-bool PandaLinkState_Orientation::has_orientationw() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-void PandaLinkState_Orientation::set_has_orientationw() {
-  _has_bits_[0] |= 0x00000008u;
-}
-void PandaLinkState_Orientation::clear_has_orientationw() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-void PandaLinkState_Orientation::clear_orientationw() {
-  orientationw_ = 0;
-  clear_has_orientationw();
-}
- float PandaLinkState_Orientation::orientationw() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationW)
-  return orientationw_;
-}
- void PandaLinkState_Orientation::set_orientationw(float value) {
-  set_has_orientationw();
-  orientationw_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationW)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState_TwistLinear
-
-// required float twistLinearX = 1;
-bool PandaLinkState_TwistLinear::has_twistlinearx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void PandaLinkState_TwistLinear::set_has_twistlinearx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void PandaLinkState_TwistLinear::clear_has_twistlinearx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void PandaLinkState_TwistLinear::clear_twistlinearx() {
-  twistlinearx_ = 0;
-  clear_has_twistlinearx();
-}
- float PandaLinkState_TwistLinear::twistlinearx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistLinear.twistLinearX)
-  return twistlinearx_;
-}
- void PandaLinkState_TwistLinear::set_twistlinearx(float value) {
-  set_has_twistlinearx();
-  twistlinearx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistLinear.twistLinearX)
-}
-
-// required float twistLinearY = 2;
-bool PandaLinkState_TwistLinear::has_twistlineary() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-void PandaLinkState_TwistLinear::set_has_twistlineary() {
-  _has_bits_[0] |= 0x00000002u;
-}
-void PandaLinkState_TwistLinear::clear_has_twistlineary() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-void PandaLinkState_TwistLinear::clear_twistlineary() {
-  twistlineary_ = 0;
-  clear_has_twistlineary();
-}
- float PandaLinkState_TwistLinear::twistlineary() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistLinear.twistLinearY)
-  return twistlineary_;
-}
- void PandaLinkState_TwistLinear::set_twistlineary(float value) {
-  set_has_twistlineary();
-  twistlineary_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistLinear.twistLinearY)
-}
-
-// required float twistLinearZ = 3;
-bool PandaLinkState_TwistLinear::has_twistlinearz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-void PandaLinkState_TwistLinear::set_has_twistlinearz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-void PandaLinkState_TwistLinear::clear_has_twistlinearz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-void PandaLinkState_TwistLinear::clear_twistlinearz() {
-  twistlinearz_ = 0;
-  clear_has_twistlinearz();
-}
- float PandaLinkState_TwistLinear::twistlinearz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistLinear.twistLinearZ)
-  return twistlinearz_;
-}
- void PandaLinkState_TwistLinear::set_twistlinearz(float value) {
-  set_has_twistlinearz();
-  twistlinearz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistLinear.twistLinearZ)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState_TwistAngular
-
-// required float twistAngularX = 1;
-bool PandaLinkState_TwistAngular::has_twistangularx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void PandaLinkState_TwistAngular::set_has_twistangularx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void PandaLinkState_TwistAngular::clear_has_twistangularx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void PandaLinkState_TwistAngular::clear_twistangularx() {
-  twistangularx_ = 0;
-  clear_has_twistangularx();
-}
- float PandaLinkState_TwistAngular::twistangularx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistAngular.twistAngularX)
-  return twistangularx_;
-}
- void PandaLinkState_TwistAngular::set_twistangularx(float value) {
-  set_has_twistangularx();
-  twistangularx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistAngular.twistAngularX)
-}
-
-// required float twistAngularY = 2;
-bool PandaLinkState_TwistAngular::has_twistangulary() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-void PandaLinkState_TwistAngular::set_has_twistangulary() {
-  _has_bits_[0] |= 0x00000002u;
-}
-void PandaLinkState_TwistAngular::clear_has_twistangulary() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-void PandaLinkState_TwistAngular::clear_twistangulary() {
-  twistangulary_ = 0;
-  clear_has_twistangulary();
-}
- float PandaLinkState_TwistAngular::twistangulary() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistAngular.twistAngularY)
-  return twistangulary_;
-}
- void PandaLinkState_TwistAngular::set_twistangulary(float value) {
-  set_has_twistangulary();
-  twistangulary_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistAngular.twistAngularY)
-}
-
-// required float twistAngularZ = 3;
-bool PandaLinkState_TwistAngular::has_twistangularz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-void PandaLinkState_TwistAngular::set_has_twistangularz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-void PandaLinkState_TwistAngular::clear_has_twistangularz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-void PandaLinkState_TwistAngular::clear_twistangularz() {
-  twistangularz_ = 0;
-  clear_has_twistangularz();
-}
- float PandaLinkState_TwistAngular::twistangularz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistAngular.twistAngularZ)
-  return twistangularz_;
-}
- void PandaLinkState_TwistAngular::set_twistangularz(float value) {
-  set_has_twistangularz();
-  twistangularz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistAngular.twistAngularZ)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState
-
-// required string name = 1;
-bool PandaLinkState::has_name() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void PandaLinkState::set_has_name() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void PandaLinkState::clear_has_name() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void PandaLinkState::clear_name() {
-  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  clear_has_name();
-}
- const ::std::string& PandaLinkState::name() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.name)
-  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-}
- void PandaLinkState::set_name(const ::std::string& value) {
-  set_has_name();
-  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.name)
-}
- void PandaLinkState::set_name(const char* value) {
-  set_has_name();
-  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
-  // @@protoc_insertion_point(field_set_char:panda.PandaLinkState.name)
-}
- void PandaLinkState::set_name(const char* value, size_t size) {
-  set_has_name();
-  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
-      ::std::string(reinterpret_cast<const char*>(value), size));
-  // @@protoc_insertion_point(field_set_pointer:panda.PandaLinkState.name)
-}
- ::std::string* PandaLinkState::mutable_name() {
-  set_has_name();
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.name)
-  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-}
- ::std::string* PandaLinkState::release_name() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.name)
-  clear_has_name();
-  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-}
- void PandaLinkState::set_allocated_name(::std::string* name) {
-  if (name != NULL) {
-    set_has_name();
-  } else {
-    clear_has_name();
-  }
-  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.name)
-}
-
-// optional .panda.PandaLinkState.Position pos = 2;
-bool PandaLinkState::has_pos() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-void PandaLinkState::set_has_pos() {
-  _has_bits_[0] |= 0x00000002u;
-}
-void PandaLinkState::clear_has_pos() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-void PandaLinkState::clear_pos() {
-  if (pos_ != NULL) pos_->::panda::PandaLinkState_Position::Clear();
-  clear_has_pos();
-}
-const ::panda::PandaLinkState_Position& PandaLinkState::pos() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.pos)
-  return pos_ != NULL ? *pos_ : *default_instance_->pos_;
-}
-::panda::PandaLinkState_Position* PandaLinkState::mutable_pos() {
-  set_has_pos();
-  if (pos_ == NULL) {
-    pos_ = new ::panda::PandaLinkState_Position;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.pos)
-  return pos_;
-}
-::panda::PandaLinkState_Position* PandaLinkState::release_pos() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.pos)
-  clear_has_pos();
-  ::panda::PandaLinkState_Position* temp = pos_;
-  pos_ = NULL;
-  return temp;
-}
-void PandaLinkState::set_allocated_pos(::panda::PandaLinkState_Position* pos) {
-  delete pos_;
-  pos_ = pos;
-  if (pos) {
-    set_has_pos();
-  } else {
-    clear_has_pos();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.pos)
-}
-
-// optional .panda.PandaLinkState.Orientation orient = 3;
-bool PandaLinkState::has_orient() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-void PandaLinkState::set_has_orient() {
-  _has_bits_[0] |= 0x00000004u;
-}
-void PandaLinkState::clear_has_orient() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-void PandaLinkState::clear_orient() {
-  if (orient_ != NULL) orient_->::panda::PandaLinkState_Orientation::Clear();
-  clear_has_orient();
-}
-const ::panda::PandaLinkState_Orientation& PandaLinkState::orient() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.orient)
-  return orient_ != NULL ? *orient_ : *default_instance_->orient_;
-}
-::panda::PandaLinkState_Orientation* PandaLinkState::mutable_orient() {
-  set_has_orient();
-  if (orient_ == NULL) {
-    orient_ = new ::panda::PandaLinkState_Orientation;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.orient)
-  return orient_;
-}
-::panda::PandaLinkState_Orientation* PandaLinkState::release_orient() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.orient)
-  clear_has_orient();
-  ::panda::PandaLinkState_Orientation* temp = orient_;
-  orient_ = NULL;
-  return temp;
-}
-void PandaLinkState::set_allocated_orient(::panda::PandaLinkState_Orientation* orient) {
-  delete orient_;
-  orient_ = orient;
-  if (orient) {
-    set_has_orient();
-  } else {
-    clear_has_orient();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.orient)
-}
-
-// optional .panda.PandaLinkState.TwistLinear tl = 4;
-bool PandaLinkState::has_tl() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-void PandaLinkState::set_has_tl() {
-  _has_bits_[0] |= 0x00000008u;
-}
-void PandaLinkState::clear_has_tl() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-void PandaLinkState::clear_tl() {
-  if (tl_ != NULL) tl_->::panda::PandaLinkState_TwistLinear::Clear();
-  clear_has_tl();
-}
-const ::panda::PandaLinkState_TwistLinear& PandaLinkState::tl() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.tl)
-  return tl_ != NULL ? *tl_ : *default_instance_->tl_;
-}
-::panda::PandaLinkState_TwistLinear* PandaLinkState::mutable_tl() {
-  set_has_tl();
-  if (tl_ == NULL) {
-    tl_ = new ::panda::PandaLinkState_TwistLinear;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.tl)
-  return tl_;
-}
-::panda::PandaLinkState_TwistLinear* PandaLinkState::release_tl() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.tl)
-  clear_has_tl();
-  ::panda::PandaLinkState_TwistLinear* temp = tl_;
-  tl_ = NULL;
-  return temp;
-}
-void PandaLinkState::set_allocated_tl(::panda::PandaLinkState_TwistLinear* tl) {
-  delete tl_;
-  tl_ = tl;
-  if (tl) {
-    set_has_tl();
-  } else {
-    clear_has_tl();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.tl)
-}
-
-// optional .panda.PandaLinkState.TwistAngular ta = 5;
-bool PandaLinkState::has_ta() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
-}
-void PandaLinkState::set_has_ta() {
-  _has_bits_[0] |= 0x00000010u;
-}
-void PandaLinkState::clear_has_ta() {
-  _has_bits_[0] &= ~0x00000010u;
-}
-void PandaLinkState::clear_ta() {
-  if (ta_ != NULL) ta_->::panda::PandaLinkState_TwistAngular::Clear();
-  clear_has_ta();
-}
-const ::panda::PandaLinkState_TwistAngular& PandaLinkState::ta() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.ta)
-  return ta_ != NULL ? *ta_ : *default_instance_->ta_;
-}
-::panda::PandaLinkState_TwistAngular* PandaLinkState::mutable_ta() {
-  set_has_ta();
-  if (ta_ == NULL) {
-    ta_ = new ::panda::PandaLinkState_TwistAngular;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.ta)
-  return ta_;
-}
-::panda::PandaLinkState_TwistAngular* PandaLinkState::release_ta() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.ta)
-  clear_has_ta();
-  ::panda::PandaLinkState_TwistAngular* temp = ta_;
-  ta_ = NULL;
-  return temp;
-}
-void PandaLinkState::set_allocated_ta(::panda::PandaLinkState_TwistAngular* ta) {
-  delete ta_;
-  ta_ = ta;
-  if (ta) {
-    set_has_ta();
-  } else {
-    clear_has_ta();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.ta)
-}
-
-#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace panda
-
-// @@protoc_insertion_point(global_scope)
diff --git a/src/messages/linkstate.pb.h b/src/messages/linkstate.pb.h
deleted file mode 100644
index 2ebd4a0..0000000
--- a/src/messages/linkstate.pb.h
+++ /dev/null
@@ -1,1252 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: linkstate.proto
-
-#ifndef PROTOBUF_linkstate_2eproto__INCLUDED
-#define PROTOBUF_linkstate_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 3000000
-#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 3000000 < 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/arena.h>
-#include <google/protobuf/arenastring.h>
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/metadata.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-#include <google/protobuf/unknown_field_set.h>
-// @@protoc_insertion_point(includes)
-
-namespace panda {
-
-// Internal implementation detail -- do not call these.
-void protobuf_AddDesc_linkstate_2eproto();
-void protobuf_AssignDesc_linkstate_2eproto();
-void protobuf_ShutdownFile_linkstate_2eproto();
-
-class PandaLinkState;
-class PandaLinkState_Orientation;
-class PandaLinkState_Position;
-class PandaLinkState_TwistAngular;
-class PandaLinkState_TwistLinear;
-
-// ===================================================================
-
-class PandaLinkState_Position : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:panda.PandaLinkState.Position) */ {
- public:
-  PandaLinkState_Position();
-  virtual ~PandaLinkState_Position();
-
-  PandaLinkState_Position(const PandaLinkState_Position& from);
-
-  inline PandaLinkState_Position& operator=(const PandaLinkState_Position& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const PandaLinkState_Position& default_instance();
-
-  void Swap(PandaLinkState_Position* other);
-
-  // implements Message ----------------------------------------------
-
-  inline PandaLinkState_Position* New() const { return New(NULL); }
-
-  PandaLinkState_Position* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const PandaLinkState_Position& from);
-  void MergeFrom(const PandaLinkState_Position& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(PandaLinkState_Position* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required float positionX = 1;
-  bool has_positionx() const;
-  void clear_positionx();
-  static const int kPositionXFieldNumber = 1;
-  float positionx() const;
-  void set_positionx(float value);
-
-  // required float positionY = 2;
-  bool has_positiony() const;
-  void clear_positiony();
-  static const int kPositionYFieldNumber = 2;
-  float positiony() const;
-  void set_positiony(float value);
-
-  // required float positionZ = 3;
-  bool has_positionz() const;
-  void clear_positionz();
-  static const int kPositionZFieldNumber = 3;
-  float positionz() const;
-  void set_positionz(float value);
-
-  // @@protoc_insertion_point(class_scope:panda.PandaLinkState.Position)
- private:
-  inline void set_has_positionx();
-  inline void clear_has_positionx();
-  inline void set_has_positiony();
-  inline void clear_has_positiony();
-  inline void set_has_positionz();
-  inline void clear_has_positionz();
-
-  // helper for ByteSize()
-  int RequiredFieldsByteSizeFallback() const;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  float positionx_;
-  float positiony_;
-  float positionz_;
-  friend void  protobuf_AddDesc_linkstate_2eproto();
-  friend void protobuf_AssignDesc_linkstate_2eproto();
-  friend void protobuf_ShutdownFile_linkstate_2eproto();
-
-  void InitAsDefaultInstance();
-  static PandaLinkState_Position* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class PandaLinkState_Orientation : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:panda.PandaLinkState.Orientation) */ {
- public:
-  PandaLinkState_Orientation();
-  virtual ~PandaLinkState_Orientation();
-
-  PandaLinkState_Orientation(const PandaLinkState_Orientation& from);
-
-  inline PandaLinkState_Orientation& operator=(const PandaLinkState_Orientation& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const PandaLinkState_Orientation& default_instance();
-
-  void Swap(PandaLinkState_Orientation* other);
-
-  // implements Message ----------------------------------------------
-
-  inline PandaLinkState_Orientation* New() const { return New(NULL); }
-
-  PandaLinkState_Orientation* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const PandaLinkState_Orientation& from);
-  void MergeFrom(const PandaLinkState_Orientation& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(PandaLinkState_Orientation* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required float orientationX = 1;
-  bool has_orientationx() const;
-  void clear_orientationx();
-  static const int kOrientationXFieldNumber = 1;
-  float orientationx() const;
-  void set_orientationx(float value);
-
-  // required float orientationY = 2;
-  bool has_orientationy() const;
-  void clear_orientationy();
-  static const int kOrientationYFieldNumber = 2;
-  float orientationy() const;
-  void set_orientationy(float value);
-
-  // required float orientationZ = 3;
-  bool has_orientationz() const;
-  void clear_orientationz();
-  static const int kOrientationZFieldNumber = 3;
-  float orientationz() const;
-  void set_orientationz(float value);
-
-  // required float orientationW = 4;
-  bool has_orientationw() const;
-  void clear_orientationw();
-  static const int kOrientationWFieldNumber = 4;
-  float orientationw() const;
-  void set_orientationw(float value);
-
-  // @@protoc_insertion_point(class_scope:panda.PandaLinkState.Orientation)
- private:
-  inline void set_has_orientationx();
-  inline void clear_has_orientationx();
-  inline void set_has_orientationy();
-  inline void clear_has_orientationy();
-  inline void set_has_orientationz();
-  inline void clear_has_orientationz();
-  inline void set_has_orientationw();
-  inline void clear_has_orientationw();
-
-  // helper for ByteSize()
-  int RequiredFieldsByteSizeFallback() const;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  float orientationx_;
-  float orientationy_;
-  float orientationz_;
-  float orientationw_;
-  friend void  protobuf_AddDesc_linkstate_2eproto();
-  friend void protobuf_AssignDesc_linkstate_2eproto();
-  friend void protobuf_ShutdownFile_linkstate_2eproto();
-
-  void InitAsDefaultInstance();
-  static PandaLinkState_Orientation* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class PandaLinkState_TwistLinear : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:panda.PandaLinkState.TwistLinear) */ {
- public:
-  PandaLinkState_TwistLinear();
-  virtual ~PandaLinkState_TwistLinear();
-
-  PandaLinkState_TwistLinear(const PandaLinkState_TwistLinear& from);
-
-  inline PandaLinkState_TwistLinear& operator=(const PandaLinkState_TwistLinear& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const PandaLinkState_TwistLinear& default_instance();
-
-  void Swap(PandaLinkState_TwistLinear* other);
-
-  // implements Message ----------------------------------------------
-
-  inline PandaLinkState_TwistLinear* New() const { return New(NULL); }
-
-  PandaLinkState_TwistLinear* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const PandaLinkState_TwistLinear& from);
-  void MergeFrom(const PandaLinkState_TwistLinear& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(PandaLinkState_TwistLinear* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required float twistLinearX = 1;
-  bool has_twistlinearx() const;
-  void clear_twistlinearx();
-  static const int kTwistLinearXFieldNumber = 1;
-  float twistlinearx() const;
-  void set_twistlinearx(float value);
-
-  // required float twistLinearY = 2;
-  bool has_twistlineary() const;
-  void clear_twistlineary();
-  static const int kTwistLinearYFieldNumber = 2;
-  float twistlineary() const;
-  void set_twistlineary(float value);
-
-  // required float twistLinearZ = 3;
-  bool has_twistlinearz() const;
-  void clear_twistlinearz();
-  static const int kTwistLinearZFieldNumber = 3;
-  float twistlinearz() const;
-  void set_twistlinearz(float value);
-
-  // @@protoc_insertion_point(class_scope:panda.PandaLinkState.TwistLinear)
- private:
-  inline void set_has_twistlinearx();
-  inline void clear_has_twistlinearx();
-  inline void set_has_twistlineary();
-  inline void clear_has_twistlineary();
-  inline void set_has_twistlinearz();
-  inline void clear_has_twistlinearz();
-
-  // helper for ByteSize()
-  int RequiredFieldsByteSizeFallback() const;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  float twistlinearx_;
-  float twistlineary_;
-  float twistlinearz_;
-  friend void  protobuf_AddDesc_linkstate_2eproto();
-  friend void protobuf_AssignDesc_linkstate_2eproto();
-  friend void protobuf_ShutdownFile_linkstate_2eproto();
-
-  void InitAsDefaultInstance();
-  static PandaLinkState_TwistLinear* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class PandaLinkState_TwistAngular : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:panda.PandaLinkState.TwistAngular) */ {
- public:
-  PandaLinkState_TwistAngular();
-  virtual ~PandaLinkState_TwistAngular();
-
-  PandaLinkState_TwistAngular(const PandaLinkState_TwistAngular& from);
-
-  inline PandaLinkState_TwistAngular& operator=(const PandaLinkState_TwistAngular& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const PandaLinkState_TwistAngular& default_instance();
-
-  void Swap(PandaLinkState_TwistAngular* other);
-
-  // implements Message ----------------------------------------------
-
-  inline PandaLinkState_TwistAngular* New() const { return New(NULL); }
-
-  PandaLinkState_TwistAngular* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const PandaLinkState_TwistAngular& from);
-  void MergeFrom(const PandaLinkState_TwistAngular& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(PandaLinkState_TwistAngular* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required float twistAngularX = 1;
-  bool has_twistangularx() const;
-  void clear_twistangularx();
-  static const int kTwistAngularXFieldNumber = 1;
-  float twistangularx() const;
-  void set_twistangularx(float value);
-
-  // required float twistAngularY = 2;
-  bool has_twistangulary() const;
-  void clear_twistangulary();
-  static const int kTwistAngularYFieldNumber = 2;
-  float twistangulary() const;
-  void set_twistangulary(float value);
-
-  // required float twistAngularZ = 3;
-  bool has_twistangularz() const;
-  void clear_twistangularz();
-  static const int kTwistAngularZFieldNumber = 3;
-  float twistangularz() const;
-  void set_twistangularz(float value);
-
-  // @@protoc_insertion_point(class_scope:panda.PandaLinkState.TwistAngular)
- private:
-  inline void set_has_twistangularx();
-  inline void clear_has_twistangularx();
-  inline void set_has_twistangulary();
-  inline void clear_has_twistangulary();
-  inline void set_has_twistangularz();
-  inline void clear_has_twistangularz();
-
-  // helper for ByteSize()
-  int RequiredFieldsByteSizeFallback() const;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  float twistangularx_;
-  float twistangulary_;
-  float twistangularz_;
-  friend void  protobuf_AddDesc_linkstate_2eproto();
-  friend void protobuf_AssignDesc_linkstate_2eproto();
-  friend void protobuf_ShutdownFile_linkstate_2eproto();
-
-  void InitAsDefaultInstance();
-  static PandaLinkState_TwistAngular* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class PandaLinkState : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:panda.PandaLinkState) */ {
- public:
-  PandaLinkState();
-  virtual ~PandaLinkState();
-
-  PandaLinkState(const PandaLinkState& from);
-
-  inline PandaLinkState& operator=(const PandaLinkState& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const PandaLinkState& default_instance();
-
-  void Swap(PandaLinkState* other);
-
-  // implements Message ----------------------------------------------
-
-  inline PandaLinkState* New() const { return New(NULL); }
-
-  PandaLinkState* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const PandaLinkState& from);
-  void MergeFrom(const PandaLinkState& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(PandaLinkState* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  typedef PandaLinkState_Position Position;
-  typedef PandaLinkState_Orientation Orientation;
-  typedef PandaLinkState_TwistLinear TwistLinear;
-  typedef PandaLinkState_TwistAngular TwistAngular;
-
-  // accessors -------------------------------------------------------
-
-  // required string name = 1;
-  bool has_name() const;
-  void clear_name();
-  static const int kNameFieldNumber = 1;
-  const ::std::string& name() const;
-  void set_name(const ::std::string& value);
-  void set_name(const char* value);
-  void set_name(const char* value, size_t size);
-  ::std::string* mutable_name();
-  ::std::string* release_name();
-  void set_allocated_name(::std::string* name);
-
-  // optional .panda.PandaLinkState.Position pos = 2;
-  bool has_pos() const;
-  void clear_pos();
-  static const int kPosFieldNumber = 2;
-  const ::panda::PandaLinkState_Position& pos() const;
-  ::panda::PandaLinkState_Position* mutable_pos();
-  ::panda::PandaLinkState_Position* release_pos();
-  void set_allocated_pos(::panda::PandaLinkState_Position* pos);
-
-  // optional .panda.PandaLinkState.Orientation orient = 3;
-  bool has_orient() const;
-  void clear_orient();
-  static const int kOrientFieldNumber = 3;
-  const ::panda::PandaLinkState_Orientation& orient() const;
-  ::panda::PandaLinkState_Orientation* mutable_orient();
-  ::panda::PandaLinkState_Orientation* release_orient();
-  void set_allocated_orient(::panda::PandaLinkState_Orientation* orient);
-
-  // optional .panda.PandaLinkState.TwistLinear tl = 4;
-  bool has_tl() const;
-  void clear_tl();
-  static const int kTlFieldNumber = 4;
-  const ::panda::PandaLinkState_TwistLinear& tl() const;
-  ::panda::PandaLinkState_TwistLinear* mutable_tl();
-  ::panda::PandaLinkState_TwistLinear* release_tl();
-  void set_allocated_tl(::panda::PandaLinkState_TwistLinear* tl);
-
-  // optional .panda.PandaLinkState.TwistAngular ta = 5;
-  bool has_ta() const;
-  void clear_ta();
-  static const int kTaFieldNumber = 5;
-  const ::panda::PandaLinkState_TwistAngular& ta() const;
-  ::panda::PandaLinkState_TwistAngular* mutable_ta();
-  ::panda::PandaLinkState_TwistAngular* release_ta();
-  void set_allocated_ta(::panda::PandaLinkState_TwistAngular* ta);
-
-  // @@protoc_insertion_point(class_scope:panda.PandaLinkState)
- private:
-  inline void set_has_name();
-  inline void clear_has_name();
-  inline void set_has_pos();
-  inline void clear_has_pos();
-  inline void set_has_orient();
-  inline void clear_has_orient();
-  inline void set_has_tl();
-  inline void clear_has_tl();
-  inline void set_has_ta();
-  inline void clear_has_ta();
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::google::protobuf::internal::ArenaStringPtr name_;
-  ::panda::PandaLinkState_Position* pos_;
-  ::panda::PandaLinkState_Orientation* orient_;
-  ::panda::PandaLinkState_TwistLinear* tl_;
-  ::panda::PandaLinkState_TwistAngular* ta_;
-  friend void  protobuf_AddDesc_linkstate_2eproto();
-  friend void protobuf_AssignDesc_linkstate_2eproto();
-  friend void protobuf_ShutdownFile_linkstate_2eproto();
-
-  void InitAsDefaultInstance();
-  static PandaLinkState* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-#if !PROTOBUF_INLINE_NOT_IN_HEADERS
-// PandaLinkState_Position
-
-// required float positionX = 1;
-inline bool PandaLinkState_Position::has_positionx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void PandaLinkState_Position::set_has_positionx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void PandaLinkState_Position::clear_has_positionx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void PandaLinkState_Position::clear_positionx() {
-  positionx_ = 0;
-  clear_has_positionx();
-}
-inline float PandaLinkState_Position::positionx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Position.positionX)
-  return positionx_;
-}
-inline void PandaLinkState_Position::set_positionx(float value) {
-  set_has_positionx();
-  positionx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Position.positionX)
-}
-
-// required float positionY = 2;
-inline bool PandaLinkState_Position::has_positiony() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void PandaLinkState_Position::set_has_positiony() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void PandaLinkState_Position::clear_has_positiony() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void PandaLinkState_Position::clear_positiony() {
-  positiony_ = 0;
-  clear_has_positiony();
-}
-inline float PandaLinkState_Position::positiony() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Position.positionY)
-  return positiony_;
-}
-inline void PandaLinkState_Position::set_positiony(float value) {
-  set_has_positiony();
-  positiony_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Position.positionY)
-}
-
-// required float positionZ = 3;
-inline bool PandaLinkState_Position::has_positionz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void PandaLinkState_Position::set_has_positionz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void PandaLinkState_Position::clear_has_positionz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void PandaLinkState_Position::clear_positionz() {
-  positionz_ = 0;
-  clear_has_positionz();
-}
-inline float PandaLinkState_Position::positionz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Position.positionZ)
-  return positionz_;
-}
-inline void PandaLinkState_Position::set_positionz(float value) {
-  set_has_positionz();
-  positionz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Position.positionZ)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState_Orientation
-
-// required float orientationX = 1;
-inline bool PandaLinkState_Orientation::has_orientationx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void PandaLinkState_Orientation::set_has_orientationx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void PandaLinkState_Orientation::clear_has_orientationx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void PandaLinkState_Orientation::clear_orientationx() {
-  orientationx_ = 0;
-  clear_has_orientationx();
-}
-inline float PandaLinkState_Orientation::orientationx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationX)
-  return orientationx_;
-}
-inline void PandaLinkState_Orientation::set_orientationx(float value) {
-  set_has_orientationx();
-  orientationx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationX)
-}
-
-// required float orientationY = 2;
-inline bool PandaLinkState_Orientation::has_orientationy() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void PandaLinkState_Orientation::set_has_orientationy() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void PandaLinkState_Orientation::clear_has_orientationy() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void PandaLinkState_Orientation::clear_orientationy() {
-  orientationy_ = 0;
-  clear_has_orientationy();
-}
-inline float PandaLinkState_Orientation::orientationy() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationY)
-  return orientationy_;
-}
-inline void PandaLinkState_Orientation::set_orientationy(float value) {
-  set_has_orientationy();
-  orientationy_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationY)
-}
-
-// required float orientationZ = 3;
-inline bool PandaLinkState_Orientation::has_orientationz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void PandaLinkState_Orientation::set_has_orientationz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void PandaLinkState_Orientation::clear_has_orientationz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void PandaLinkState_Orientation::clear_orientationz() {
-  orientationz_ = 0;
-  clear_has_orientationz();
-}
-inline float PandaLinkState_Orientation::orientationz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationZ)
-  return orientationz_;
-}
-inline void PandaLinkState_Orientation::set_orientationz(float value) {
-  set_has_orientationz();
-  orientationz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationZ)
-}
-
-// required float orientationW = 4;
-inline bool PandaLinkState_Orientation::has_orientationw() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-inline void PandaLinkState_Orientation::set_has_orientationw() {
-  _has_bits_[0] |= 0x00000008u;
-}
-inline void PandaLinkState_Orientation::clear_has_orientationw() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-inline void PandaLinkState_Orientation::clear_orientationw() {
-  orientationw_ = 0;
-  clear_has_orientationw();
-}
-inline float PandaLinkState_Orientation::orientationw() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.Orientation.orientationW)
-  return orientationw_;
-}
-inline void PandaLinkState_Orientation::set_orientationw(float value) {
-  set_has_orientationw();
-  orientationw_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.Orientation.orientationW)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState_TwistLinear
-
-// required float twistLinearX = 1;
-inline bool PandaLinkState_TwistLinear::has_twistlinearx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void PandaLinkState_TwistLinear::set_has_twistlinearx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void PandaLinkState_TwistLinear::clear_has_twistlinearx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void PandaLinkState_TwistLinear::clear_twistlinearx() {
-  twistlinearx_ = 0;
-  clear_has_twistlinearx();
-}
-inline float PandaLinkState_TwistLinear::twistlinearx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistLinear.twistLinearX)
-  return twistlinearx_;
-}
-inline void PandaLinkState_TwistLinear::set_twistlinearx(float value) {
-  set_has_twistlinearx();
-  twistlinearx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistLinear.twistLinearX)
-}
-
-// required float twistLinearY = 2;
-inline bool PandaLinkState_TwistLinear::has_twistlineary() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void PandaLinkState_TwistLinear::set_has_twistlineary() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void PandaLinkState_TwistLinear::clear_has_twistlineary() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void PandaLinkState_TwistLinear::clear_twistlineary() {
-  twistlineary_ = 0;
-  clear_has_twistlineary();
-}
-inline float PandaLinkState_TwistLinear::twistlineary() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistLinear.twistLinearY)
-  return twistlineary_;
-}
-inline void PandaLinkState_TwistLinear::set_twistlineary(float value) {
-  set_has_twistlineary();
-  twistlineary_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistLinear.twistLinearY)
-}
-
-// required float twistLinearZ = 3;
-inline bool PandaLinkState_TwistLinear::has_twistlinearz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void PandaLinkState_TwistLinear::set_has_twistlinearz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void PandaLinkState_TwistLinear::clear_has_twistlinearz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void PandaLinkState_TwistLinear::clear_twistlinearz() {
-  twistlinearz_ = 0;
-  clear_has_twistlinearz();
-}
-inline float PandaLinkState_TwistLinear::twistlinearz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistLinear.twistLinearZ)
-  return twistlinearz_;
-}
-inline void PandaLinkState_TwistLinear::set_twistlinearz(float value) {
-  set_has_twistlinearz();
-  twistlinearz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistLinear.twistLinearZ)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState_TwistAngular
-
-// required float twistAngularX = 1;
-inline bool PandaLinkState_TwistAngular::has_twistangularx() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void PandaLinkState_TwistAngular::set_has_twistangularx() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void PandaLinkState_TwistAngular::clear_has_twistangularx() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void PandaLinkState_TwistAngular::clear_twistangularx() {
-  twistangularx_ = 0;
-  clear_has_twistangularx();
-}
-inline float PandaLinkState_TwistAngular::twistangularx() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistAngular.twistAngularX)
-  return twistangularx_;
-}
-inline void PandaLinkState_TwistAngular::set_twistangularx(float value) {
-  set_has_twistangularx();
-  twistangularx_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistAngular.twistAngularX)
-}
-
-// required float twistAngularY = 2;
-inline bool PandaLinkState_TwistAngular::has_twistangulary() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void PandaLinkState_TwistAngular::set_has_twistangulary() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void PandaLinkState_TwistAngular::clear_has_twistangulary() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void PandaLinkState_TwistAngular::clear_twistangulary() {
-  twistangulary_ = 0;
-  clear_has_twistangulary();
-}
-inline float PandaLinkState_TwistAngular::twistangulary() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistAngular.twistAngularY)
-  return twistangulary_;
-}
-inline void PandaLinkState_TwistAngular::set_twistangulary(float value) {
-  set_has_twistangulary();
-  twistangulary_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistAngular.twistAngularY)
-}
-
-// required float twistAngularZ = 3;
-inline bool PandaLinkState_TwistAngular::has_twistangularz() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void PandaLinkState_TwistAngular::set_has_twistangularz() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void PandaLinkState_TwistAngular::clear_has_twistangularz() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void PandaLinkState_TwistAngular::clear_twistangularz() {
-  twistangularz_ = 0;
-  clear_has_twistangularz();
-}
-inline float PandaLinkState_TwistAngular::twistangularz() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.TwistAngular.twistAngularZ)
-  return twistangularz_;
-}
-inline void PandaLinkState_TwistAngular::set_twistangularz(float value) {
-  set_has_twistangularz();
-  twistangularz_ = value;
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.TwistAngular.twistAngularZ)
-}
-
-// -------------------------------------------------------------------
-
-// PandaLinkState
-
-// required string name = 1;
-inline bool PandaLinkState::has_name() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void PandaLinkState::set_has_name() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void PandaLinkState::clear_has_name() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void PandaLinkState::clear_name() {
-  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  clear_has_name();
-}
-inline const ::std::string& PandaLinkState::name() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.name)
-  return name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-}
-inline void PandaLinkState::set_name(const ::std::string& value) {
-  set_has_name();
-  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
-  // @@protoc_insertion_point(field_set:panda.PandaLinkState.name)
-}
-inline void PandaLinkState::set_name(const char* value) {
-  set_has_name();
-  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
-  // @@protoc_insertion_point(field_set_char:panda.PandaLinkState.name)
-}
-inline void PandaLinkState::set_name(const char* value, size_t size) {
-  set_has_name();
-  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
-      ::std::string(reinterpret_cast<const char*>(value), size));
-  // @@protoc_insertion_point(field_set_pointer:panda.PandaLinkState.name)
-}
-inline ::std::string* PandaLinkState::mutable_name() {
-  set_has_name();
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.name)
-  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-}
-inline ::std::string* PandaLinkState::release_name() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.name)
-  clear_has_name();
-  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-}
-inline void PandaLinkState::set_allocated_name(::std::string* name) {
-  if (name != NULL) {
-    set_has_name();
-  } else {
-    clear_has_name();
-  }
-  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.name)
-}
-
-// optional .panda.PandaLinkState.Position pos = 2;
-inline bool PandaLinkState::has_pos() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void PandaLinkState::set_has_pos() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void PandaLinkState::clear_has_pos() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void PandaLinkState::clear_pos() {
-  if (pos_ != NULL) pos_->::panda::PandaLinkState_Position::Clear();
-  clear_has_pos();
-}
-inline const ::panda::PandaLinkState_Position& PandaLinkState::pos() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.pos)
-  return pos_ != NULL ? *pos_ : *default_instance_->pos_;
-}
-inline ::panda::PandaLinkState_Position* PandaLinkState::mutable_pos() {
-  set_has_pos();
-  if (pos_ == NULL) {
-    pos_ = new ::panda::PandaLinkState_Position;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.pos)
-  return pos_;
-}
-inline ::panda::PandaLinkState_Position* PandaLinkState::release_pos() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.pos)
-  clear_has_pos();
-  ::panda::PandaLinkState_Position* temp = pos_;
-  pos_ = NULL;
-  return temp;
-}
-inline void PandaLinkState::set_allocated_pos(::panda::PandaLinkState_Position* pos) {
-  delete pos_;
-  pos_ = pos;
-  if (pos) {
-    set_has_pos();
-  } else {
-    clear_has_pos();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.pos)
-}
-
-// optional .panda.PandaLinkState.Orientation orient = 3;
-inline bool PandaLinkState::has_orient() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void PandaLinkState::set_has_orient() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void PandaLinkState::clear_has_orient() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void PandaLinkState::clear_orient() {
-  if (orient_ != NULL) orient_->::panda::PandaLinkState_Orientation::Clear();
-  clear_has_orient();
-}
-inline const ::panda::PandaLinkState_Orientation& PandaLinkState::orient() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.orient)
-  return orient_ != NULL ? *orient_ : *default_instance_->orient_;
-}
-inline ::panda::PandaLinkState_Orientation* PandaLinkState::mutable_orient() {
-  set_has_orient();
-  if (orient_ == NULL) {
-    orient_ = new ::panda::PandaLinkState_Orientation;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.orient)
-  return orient_;
-}
-inline ::panda::PandaLinkState_Orientation* PandaLinkState::release_orient() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.orient)
-  clear_has_orient();
-  ::panda::PandaLinkState_Orientation* temp = orient_;
-  orient_ = NULL;
-  return temp;
-}
-inline void PandaLinkState::set_allocated_orient(::panda::PandaLinkState_Orientation* orient) {
-  delete orient_;
-  orient_ = orient;
-  if (orient) {
-    set_has_orient();
-  } else {
-    clear_has_orient();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.orient)
-}
-
-// optional .panda.PandaLinkState.TwistLinear tl = 4;
-inline bool PandaLinkState::has_tl() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-inline void PandaLinkState::set_has_tl() {
-  _has_bits_[0] |= 0x00000008u;
-}
-inline void PandaLinkState::clear_has_tl() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-inline void PandaLinkState::clear_tl() {
-  if (tl_ != NULL) tl_->::panda::PandaLinkState_TwistLinear::Clear();
-  clear_has_tl();
-}
-inline const ::panda::PandaLinkState_TwistLinear& PandaLinkState::tl() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.tl)
-  return tl_ != NULL ? *tl_ : *default_instance_->tl_;
-}
-inline ::panda::PandaLinkState_TwistLinear* PandaLinkState::mutable_tl() {
-  set_has_tl();
-  if (tl_ == NULL) {
-    tl_ = new ::panda::PandaLinkState_TwistLinear;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.tl)
-  return tl_;
-}
-inline ::panda::PandaLinkState_TwistLinear* PandaLinkState::release_tl() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.tl)
-  clear_has_tl();
-  ::panda::PandaLinkState_TwistLinear* temp = tl_;
-  tl_ = NULL;
-  return temp;
-}
-inline void PandaLinkState::set_allocated_tl(::panda::PandaLinkState_TwistLinear* tl) {
-  delete tl_;
-  tl_ = tl;
-  if (tl) {
-    set_has_tl();
-  } else {
-    clear_has_tl();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.tl)
-}
-
-// optional .panda.PandaLinkState.TwistAngular ta = 5;
-inline bool PandaLinkState::has_ta() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
-}
-inline void PandaLinkState::set_has_ta() {
-  _has_bits_[0] |= 0x00000010u;
-}
-inline void PandaLinkState::clear_has_ta() {
-  _has_bits_[0] &= ~0x00000010u;
-}
-inline void PandaLinkState::clear_ta() {
-  if (ta_ != NULL) ta_->::panda::PandaLinkState_TwistAngular::Clear();
-  clear_has_ta();
-}
-inline const ::panda::PandaLinkState_TwistAngular& PandaLinkState::ta() const {
-  // @@protoc_insertion_point(field_get:panda.PandaLinkState.ta)
-  return ta_ != NULL ? *ta_ : *default_instance_->ta_;
-}
-inline ::panda::PandaLinkState_TwistAngular* PandaLinkState::mutable_ta() {
-  set_has_ta();
-  if (ta_ == NULL) {
-    ta_ = new ::panda::PandaLinkState_TwistAngular;
-  }
-  // @@protoc_insertion_point(field_mutable:panda.PandaLinkState.ta)
-  return ta_;
-}
-inline ::panda::PandaLinkState_TwistAngular* PandaLinkState::release_ta() {
-  // @@protoc_insertion_point(field_release:panda.PandaLinkState.ta)
-  clear_has_ta();
-  ::panda::PandaLinkState_TwistAngular* temp = ta_;
-  ta_ = NULL;
-  return temp;
-}
-inline void PandaLinkState::set_allocated_ta(::panda::PandaLinkState_TwistAngular* ta) {
-  delete ta_;
-  ta_ = ta;
-  if (ta) {
-    set_has_ta();
-  } else {
-    clear_has_ta();
-  }
-  // @@protoc_insertion_point(field_set_allocated:panda.PandaLinkState.ta)
-}
-
-#endif  // !PROTOBUF_INLINE_NOT_IN_HEADERS
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace panda
-
-// @@protoc_insertion_point(global_scope)
-
-#endif  // PROTOBUF_linkstate_2eproto__INCLUDED
diff --git a/src/messages/robotconfig.pb.cc b/src/messages/robotconfig.pb.cc
deleted file mode 100644
index 5471f09..0000000
--- a/src/messages/robotconfig.pb.cc
+++ /dev/null
@@ -1,374 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: robotconfig.proto
-
-#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
-#include "robotconfig.pb.h"
-
-#include <algorithm>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/stubs/port.h>
-#include <google/protobuf/stubs/once.h>
-#include <google/protobuf/io/coded_stream.h>
-#include <google/protobuf/wire_format_lite_inl.h>
-#include <google/protobuf/descriptor.h>
-#include <google/protobuf/generated_message_reflection.h>
-#include <google/protobuf/reflection_ops.h>
-#include <google/protobuf/wire_format.h>
-// @@protoc_insertion_point(includes)
-
-namespace config {
-
-namespace {
-
-const ::google::protobuf::Descriptor* RobotConfig_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  RobotConfig_reflection_ = NULL;
-
-}  // namespace
-
-
-void protobuf_AssignDesc_robotconfig_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AssignDesc_robotconfig_2eproto() {
-  protobuf_AddDesc_robotconfig_2eproto();
-  const ::google::protobuf::FileDescriptor* file =
-    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
-      "robotconfig.proto");
-  GOOGLE_CHECK(file != NULL);
-  RobotConfig_descriptor_ = file->message_type(0);
-  static const int RobotConfig_offsets_[1] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RobotConfig, speed_),
-  };
-  RobotConfig_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      RobotConfig_descriptor_,
-      RobotConfig::default_instance_,
-      RobotConfig_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RobotConfig, _has_bits_[0]),
-      -1,
-      -1,
-      sizeof(RobotConfig),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RobotConfig, _internal_metadata_),
-      -1);
-}
-
-namespace {
-
-GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
-inline void protobuf_AssignDescriptorsOnce() {
-  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
-                 &protobuf_AssignDesc_robotconfig_2eproto);
-}
-
-void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD;
-void protobuf_RegisterTypes(const ::std::string&) {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      RobotConfig_descriptor_, &RobotConfig::default_instance());
-}
-
-}  // namespace
-
-void protobuf_ShutdownFile_robotconfig_2eproto() {
-  delete RobotConfig::default_instance_;
-  delete RobotConfig_reflection_;
-}
-
-void protobuf_AddDesc_robotconfig_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AddDesc_robotconfig_2eproto() {
-  static bool already_here = false;
-  if (already_here) return;
-  already_here = true;
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-    "\n\021robotconfig.proto\022\006config\"\034\n\013RobotConf"
-    "ig\022\r\n\005speed\030\001 \002(\001", 57);
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
-    "robotconfig.proto", &protobuf_RegisterTypes);
-  RobotConfig::default_instance_ = new RobotConfig();
-  RobotConfig::default_instance_->InitAsDefaultInstance();
-  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_robotconfig_2eproto);
-}
-
-// Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_robotconfig_2eproto {
-  StaticDescriptorInitializer_robotconfig_2eproto() {
-    protobuf_AddDesc_robotconfig_2eproto();
-  }
-} static_descriptor_initializer_robotconfig_2eproto_;
-
-// ===================================================================
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int RobotConfig::kSpeedFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-RobotConfig::RobotConfig()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:config.RobotConfig)
-}
-
-void RobotConfig::InitAsDefaultInstance() {
-}
-
-RobotConfig::RobotConfig(const RobotConfig& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:config.RobotConfig)
-}
-
-void RobotConfig::SharedCtor() {
-  _cached_size_ = 0;
-  speed_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-RobotConfig::~RobotConfig() {
-  // @@protoc_insertion_point(destructor:config.RobotConfig)
-  SharedDtor();
-}
-
-void RobotConfig::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void RobotConfig::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* RobotConfig::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return RobotConfig_descriptor_;
-}
-
-const RobotConfig& RobotConfig::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_robotconfig_2eproto();
-  return *default_instance_;
-}
-
-RobotConfig* RobotConfig::default_instance_ = NULL;
-
-RobotConfig* RobotConfig::New(::google::protobuf::Arena* arena) const {
-  RobotConfig* n = new RobotConfig;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void RobotConfig::Clear() {
-// @@protoc_insertion_point(message_clear_start:config.RobotConfig)
-  speed_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  if (_internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->Clear();
-  }
-}
-
-bool RobotConfig::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:config.RobotConfig)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // required double speed = 1;
-      case 1: {
-        if (tag == 9) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &speed_)));
-          set_has_speed();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:config.RobotConfig)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:config.RobotConfig)
-  return false;
-#undef DO_
-}
-
-void RobotConfig::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:config.RobotConfig)
-  // required double speed = 1;
-  if (has_speed()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->speed(), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:config.RobotConfig)
-}
-
-::google::protobuf::uint8* RobotConfig::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:config.RobotConfig)
-  // required double speed = 1;
-  if (has_speed()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->speed(), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:config.RobotConfig)
-  return target;
-}
-
-int RobotConfig::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:config.RobotConfig)
-  int total_size = 0;
-
-  // required double speed = 1;
-  if (has_speed()) {
-    total_size += 1 + 8;
-  }
-  if (_internal_metadata_.have_unknown_fields()) {
-    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 RobotConfig::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:config.RobotConfig)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const RobotConfig* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const RobotConfig>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:config.RobotConfig)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:config.RobotConfig)
-    MergeFrom(*source);
-  }
-}
-
-void RobotConfig::MergeFrom(const RobotConfig& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:config.RobotConfig)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_speed()) {
-      set_speed(from.speed());
-    }
-  }
-  if (from._internal_metadata_.have_unknown_fields()) {
-    mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-  }
-}
-
-void RobotConfig::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:config.RobotConfig)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void RobotConfig::CopyFrom(const RobotConfig& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:config.RobotConfig)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool RobotConfig::IsInitialized() const {
-  if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
-
-  return true;
-}
-
-void RobotConfig::Swap(RobotConfig* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void RobotConfig::InternalSwap(RobotConfig* other) {
-  std::swap(speed_, other->speed_);
-  std::swap(_has_bits_[0], other->_has_bits_[0]);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata RobotConfig::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = RobotConfig_descriptor_;
-  metadata.reflection = RobotConfig_reflection_;
-  return metadata;
-}
-
-#if PROTOBUF_INLINE_NOT_IN_HEADERS
-// RobotConfig
-
-// required double speed = 1;
-bool RobotConfig::has_speed() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-void RobotConfig::set_has_speed() {
-  _has_bits_[0] |= 0x00000001u;
-}
-void RobotConfig::clear_has_speed() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-void RobotConfig::clear_speed() {
-  speed_ = 0;
-  clear_has_speed();
-}
- double RobotConfig::speed() const {
-  // @@protoc_insertion_point(field_get:config.RobotConfig.speed)
-  return speed_;
-}
- void RobotConfig::set_speed(double value) {
-  set_has_speed();
-  speed_ = value;
-  // @@protoc_insertion_point(field_set:config.RobotConfig.speed)
-}
-
-#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace config
-
-// @@protoc_insertion_point(global_scope)
diff --git a/src/messages/robotconfig.pb.h b/src/messages/robotconfig.pb.h
deleted file mode 100644
index 8fec740..0000000
--- a/src/messages/robotconfig.pb.h
+++ /dev/null
@@ -1,174 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: robotconfig.proto
-
-#ifndef PROTOBUF_robotconfig_2eproto__INCLUDED
-#define PROTOBUF_robotconfig_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 3000000
-#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 3000000 < 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/arena.h>
-#include <google/protobuf/arenastring.h>
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/metadata.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-#include <google/protobuf/unknown_field_set.h>
-// @@protoc_insertion_point(includes)
-
-namespace config {
-
-// Internal implementation detail -- do not call these.
-void protobuf_AddDesc_robotconfig_2eproto();
-void protobuf_AssignDesc_robotconfig_2eproto();
-void protobuf_ShutdownFile_robotconfig_2eproto();
-
-class RobotConfig;
-
-// ===================================================================
-
-class RobotConfig : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:config.RobotConfig) */ {
- public:
-  RobotConfig();
-  virtual ~RobotConfig();
-
-  RobotConfig(const RobotConfig& from);
-
-  inline RobotConfig& operator=(const RobotConfig& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _internal_metadata_.unknown_fields();
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return _internal_metadata_.mutable_unknown_fields();
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const RobotConfig& default_instance();
-
-  void Swap(RobotConfig* other);
-
-  // implements Message ----------------------------------------------
-
-  inline RobotConfig* New() const { return New(NULL); }
-
-  RobotConfig* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const RobotConfig& from);
-  void MergeFrom(const RobotConfig& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(RobotConfig* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // required double speed = 1;
-  bool has_speed() const;
-  void clear_speed();
-  static const int kSpeedFieldNumber = 1;
-  double speed() const;
-  void set_speed(double value);
-
-  // @@protoc_insertion_point(class_scope:config.RobotConfig)
- private:
-  inline void set_has_speed();
-  inline void clear_has_speed();
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  double speed_;
-  friend void  protobuf_AddDesc_robotconfig_2eproto();
-  friend void protobuf_AssignDesc_robotconfig_2eproto();
-  friend void protobuf_ShutdownFile_robotconfig_2eproto();
-
-  void InitAsDefaultInstance();
-  static RobotConfig* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-#if !PROTOBUF_INLINE_NOT_IN_HEADERS
-// RobotConfig
-
-// required double speed = 1;
-inline bool RobotConfig::has_speed() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void RobotConfig::set_has_speed() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void RobotConfig::clear_has_speed() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void RobotConfig::clear_speed() {
-  speed_ = 0;
-  clear_has_speed();
-}
-inline double RobotConfig::speed() const {
-  // @@protoc_insertion_point(field_get:config.RobotConfig.speed)
-  return speed_;
-}
-inline void RobotConfig::set_speed(double value) {
-  set_has_speed();
-  speed_ = value;
-  // @@protoc_insertion_point(field_set:config.RobotConfig.speed)
-}
-
-#endif  // !PROTOBUF_INLINE_NOT_IN_HEADERS
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace config
-
-// @@protoc_insertion_point(global_scope)
-
-#endif  // PROTOBUF_robotconfig_2eproto__INCLUDED
diff --git a/src/messages/trajectory.pb.cc b/src/messages/trajectory.pb.cc
deleted file mode 100644
index 3c5c04b..0000000
--- a/src/messages/trajectory.pb.cc
+++ /dev/null
@@ -1,746 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: trajectory.proto
-
-#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
-#include "trajectory.pb.h"
-
-#include <algorithm>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/stubs/port.h>
-#include <google/protobuf/stubs/once.h>
-#include <google/protobuf/io/coded_stream.h>
-#include <google/protobuf/wire_format_lite_inl.h>
-#include <google/protobuf/descriptor.h>
-#include <google/protobuf/generated_message_reflection.h>
-#include <google/protobuf/reflection_ops.h>
-#include <google/protobuf/wire_format.h>
-// @@protoc_insertion_point(includes)
-
-namespace plan {
-
-namespace {
-
-const ::google::protobuf::Descriptor* Trajectory_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Trajectory_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Trajectory_Position_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Trajectory_Position_reflection_ = NULL;
-
-}  // namespace
-
-
-void protobuf_AssignDesc_trajectory_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AssignDesc_trajectory_2eproto() {
-  protobuf_AddDesc_trajectory_2eproto();
-  const ::google::protobuf::FileDescriptor* file =
-    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
-      "trajectory.proto");
-  GOOGLE_CHECK(file != NULL);
-  Trajectory_descriptor_ = file->message_type(0);
-  static const int Trajectory_offsets_[1] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory, pos_),
-  };
-  Trajectory_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      Trajectory_descriptor_,
-      Trajectory::default_instance_,
-      Trajectory_offsets_,
-      -1,
-      -1,
-      -1,
-      sizeof(Trajectory),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory, _internal_metadata_),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory, _is_default_instance_));
-  Trajectory_Position_descriptor_ = Trajectory_descriptor_->nested_type(0);
-  static const int Trajectory_Position_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory_Position, x_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory_Position, y_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory_Position, z_),
-  };
-  Trajectory_Position_reflection_ =
-    ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
-      Trajectory_Position_descriptor_,
-      Trajectory_Position::default_instance_,
-      Trajectory_Position_offsets_,
-      -1,
-      -1,
-      -1,
-      sizeof(Trajectory_Position),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory_Position, _internal_metadata_),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Trajectory_Position, _is_default_instance_));
-}
-
-namespace {
-
-GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
-inline void protobuf_AssignDescriptorsOnce() {
-  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
-                 &protobuf_AssignDesc_trajectory_2eproto);
-}
-
-void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD;
-void protobuf_RegisterTypes(const ::std::string&) {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      Trajectory_descriptor_, &Trajectory::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-      Trajectory_Position_descriptor_, &Trajectory_Position::default_instance());
-}
-
-}  // namespace
-
-void protobuf_ShutdownFile_trajectory_2eproto() {
-  delete Trajectory::default_instance_;
-  delete Trajectory_reflection_;
-  delete Trajectory_Position::default_instance_;
-  delete Trajectory_Position_reflection_;
-}
-
-void protobuf_AddDesc_trajectory_2eproto() GOOGLE_ATTRIBUTE_COLD;
-void protobuf_AddDesc_trajectory_2eproto() {
-  static bool already_here = false;
-  if (already_here) return;
-  already_here = true;
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-    "\n\020trajectory.proto\022\004plan\"a\n\nTrajectory\022&"
-    "\n\003pos\030\001 \003(\0132\031.plan.Trajectory.Position\032+"
-    "\n\010Position\022\t\n\001x\030\001 \001(\001\022\t\n\001y\030\002 \001(\001\022\t\n\001z\030\003 "
-    "\001(\001b\006proto3", 131);
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
-    "trajectory.proto", &protobuf_RegisterTypes);
-  Trajectory::default_instance_ = new Trajectory();
-  Trajectory_Position::default_instance_ = new Trajectory_Position();
-  Trajectory::default_instance_->InitAsDefaultInstance();
-  Trajectory_Position::default_instance_->InitAsDefaultInstance();
-  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_trajectory_2eproto);
-}
-
-// Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_trajectory_2eproto {
-  StaticDescriptorInitializer_trajectory_2eproto() {
-    protobuf_AddDesc_trajectory_2eproto();
-  }
-} static_descriptor_initializer_trajectory_2eproto_;
-
-// ===================================================================
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int Trajectory_Position::kXFieldNumber;
-const int Trajectory_Position::kYFieldNumber;
-const int Trajectory_Position::kZFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-Trajectory_Position::Trajectory_Position()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:plan.Trajectory.Position)
-}
-
-void Trajectory_Position::InitAsDefaultInstance() {
-  _is_default_instance_ = true;
-}
-
-Trajectory_Position::Trajectory_Position(const Trajectory_Position& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:plan.Trajectory.Position)
-}
-
-void Trajectory_Position::SharedCtor() {
-    _is_default_instance_ = false;
-  _cached_size_ = 0;
-  x_ = 0;
-  y_ = 0;
-  z_ = 0;
-}
-
-Trajectory_Position::~Trajectory_Position() {
-  // @@protoc_insertion_point(destructor:plan.Trajectory.Position)
-  SharedDtor();
-}
-
-void Trajectory_Position::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Trajectory_Position::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Trajectory_Position::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Trajectory_Position_descriptor_;
-}
-
-const Trajectory_Position& Trajectory_Position::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_trajectory_2eproto();
-  return *default_instance_;
-}
-
-Trajectory_Position* Trajectory_Position::default_instance_ = NULL;
-
-Trajectory_Position* Trajectory_Position::New(::google::protobuf::Arena* arena) const {
-  Trajectory_Position* n = new Trajectory_Position;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void Trajectory_Position::Clear() {
-// @@protoc_insertion_point(message_clear_start:plan.Trajectory.Position)
-#if defined(__clang__)
-#define ZR_HELPER_(f) \
-  _Pragma("clang diagnostic push") \
-  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
-  __builtin_offsetof(Trajectory_Position, f) \
-  _Pragma("clang diagnostic pop")
-#else
-#define ZR_HELPER_(f) reinterpret_cast<char*>(\
-  &reinterpret_cast<Trajectory_Position*>(16)->f)
-#endif
-
-#define ZR_(first, last) do {\
-  ::memset(&first, 0,\
-           ZR_HELPER_(last) - ZR_HELPER_(first) + sizeof(last));\
-} while (0)
-
-  ZR_(x_, z_);
-
-#undef ZR_HELPER_
-#undef ZR_
-
-}
-
-bool Trajectory_Position::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:plan.Trajectory.Position)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional double x = 1;
-      case 1: {
-        if (tag == 9) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &x_)));
-
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(17)) goto parse_y;
-        break;
-      }
-
-      // optional double y = 2;
-      case 2: {
-        if (tag == 17) {
-         parse_y:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &y_)));
-
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(25)) goto parse_z;
-        break;
-      }
-
-      // optional double z = 3;
-      case 3: {
-        if (tag == 25) {
-         parse_z:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &z_)));
-
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:plan.Trajectory.Position)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:plan.Trajectory.Position)
-  return false;
-#undef DO_
-}
-
-void Trajectory_Position::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:plan.Trajectory.Position)
-  // optional double x = 1;
-  if (this->x() != 0) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->x(), output);
-  }
-
-  // optional double y = 2;
-  if (this->y() != 0) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->y(), output);
-  }
-
-  // optional double z = 3;
-  if (this->z() != 0) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(3, this->z(), output);
-  }
-
-  // @@protoc_insertion_point(serialize_end:plan.Trajectory.Position)
-}
-
-::google::protobuf::uint8* Trajectory_Position::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:plan.Trajectory.Position)
-  // optional double x = 1;
-  if (this->x() != 0) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->x(), target);
-  }
-
-  // optional double y = 2;
-  if (this->y() != 0) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->y(), target);
-  }
-
-  // optional double z = 3;
-  if (this->z() != 0) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(3, this->z(), target);
-  }
-
-  // @@protoc_insertion_point(serialize_to_array_end:plan.Trajectory.Position)
-  return target;
-}
-
-int Trajectory_Position::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:plan.Trajectory.Position)
-  int total_size = 0;
-
-  // optional double x = 1;
-  if (this->x() != 0) {
-    total_size += 1 + 8;
-  }
-
-  // optional double y = 2;
-  if (this->y() != 0) {
-    total_size += 1 + 8;
-  }
-
-  // optional double z = 3;
-  if (this->z() != 0) {
-    total_size += 1 + 8;
-  }
-
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Trajectory_Position::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:plan.Trajectory.Position)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const Trajectory_Position* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const Trajectory_Position>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:plan.Trajectory.Position)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:plan.Trajectory.Position)
-    MergeFrom(*source);
-  }
-}
-
-void Trajectory_Position::MergeFrom(const Trajectory_Position& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:plan.Trajectory.Position)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  if (from.x() != 0) {
-    set_x(from.x());
-  }
-  if (from.y() != 0) {
-    set_y(from.y());
-  }
-  if (from.z() != 0) {
-    set_z(from.z());
-  }
-}
-
-void Trajectory_Position::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:plan.Trajectory.Position)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Trajectory_Position::CopyFrom(const Trajectory_Position& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:plan.Trajectory.Position)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Trajectory_Position::IsInitialized() const {
-
-  return true;
-}
-
-void Trajectory_Position::Swap(Trajectory_Position* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void Trajectory_Position::InternalSwap(Trajectory_Position* other) {
-  std::swap(x_, other->x_);
-  std::swap(y_, other->y_);
-  std::swap(z_, other->z_);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata Trajectory_Position::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Trajectory_Position_descriptor_;
-  metadata.reflection = Trajectory_Position_reflection_;
-  return metadata;
-}
-
-
-// -------------------------------------------------------------------
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int Trajectory::kPosFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-Trajectory::Trajectory()
-  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:plan.Trajectory)
-}
-
-void Trajectory::InitAsDefaultInstance() {
-  _is_default_instance_ = true;
-}
-
-Trajectory::Trajectory(const Trajectory& from)
-  : ::google::protobuf::Message(),
-    _internal_metadata_(NULL) {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:plan.Trajectory)
-}
-
-void Trajectory::SharedCtor() {
-    _is_default_instance_ = false;
-  _cached_size_ = 0;
-}
-
-Trajectory::~Trajectory() {
-  // @@protoc_insertion_point(destructor:plan.Trajectory)
-  SharedDtor();
-}
-
-void Trajectory::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Trajectory::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Trajectory::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Trajectory_descriptor_;
-}
-
-const Trajectory& Trajectory::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_trajectory_2eproto();
-  return *default_instance_;
-}
-
-Trajectory* Trajectory::default_instance_ = NULL;
-
-Trajectory* Trajectory::New(::google::protobuf::Arena* arena) const {
-  Trajectory* n = new Trajectory;
-  if (arena != NULL) {
-    arena->Own(n);
-  }
-  return n;
-}
-
-void Trajectory::Clear() {
-// @@protoc_insertion_point(message_clear_start:plan.Trajectory)
-  pos_.Clear();
-}
-
-bool Trajectory::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:plan.Trajectory)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // repeated .plan.Trajectory.Position pos = 1;
-      case 1: {
-        if (tag == 10) {
-          DO_(input->IncrementRecursionDepth());
-         parse_loop_pos:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth(
-                input, add_pos()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(10)) goto parse_loop_pos;
-        input->UnsafeDecrementRecursionDepth();
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:plan.Trajectory)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:plan.Trajectory)
-  return false;
-#undef DO_
-}
-
-void Trajectory::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:plan.Trajectory)
-  // repeated .plan.Trajectory.Position pos = 1;
-  for (unsigned int i = 0, n = this->pos_size(); i < n; i++) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      1, this->pos(i), output);
-  }
-
-  // @@protoc_insertion_point(serialize_end:plan.Trajectory)
-}
-
-::google::protobuf::uint8* Trajectory::InternalSerializeWithCachedSizesToArray(
-    bool deterministic, ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:plan.Trajectory)
-  // repeated .plan.Trajectory.Position pos = 1;
-  for (unsigned int i = 0, n = this->pos_size(); i < n; i++) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageNoVirtualToArray(
-        1, this->pos(i), false, target);
-  }
-
-  // @@protoc_insertion_point(serialize_to_array_end:plan.Trajectory)
-  return target;
-}
-
-int Trajectory::ByteSize() const {
-// @@protoc_insertion_point(message_byte_size_start:plan.Trajectory)
-  int total_size = 0;
-
-  // repeated .plan.Trajectory.Position pos = 1;
-  total_size += 1 * this->pos_size();
-  for (int i = 0; i < this->pos_size(); i++) {
-    total_size +=
-      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-        this->pos(i));
-  }
-
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Trajectory::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:plan.Trajectory)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  const Trajectory* source = 
-      ::google::protobuf::internal::DynamicCastToGenerated<const Trajectory>(
-          &from);
-  if (source == NULL) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:plan.Trajectory)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:plan.Trajectory)
-    MergeFrom(*source);
-  }
-}
-
-void Trajectory::MergeFrom(const Trajectory& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:plan.Trajectory)
-  if (GOOGLE_PREDICT_FALSE(&from == this)) {
-    ::google::protobuf::internal::MergeFromFail(__FILE__, __LINE__);
-  }
-  pos_.MergeFrom(from.pos_);
-}
-
-void Trajectory::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:plan.Trajectory)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Trajectory::CopyFrom(const Trajectory& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:plan.Trajectory)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Trajectory::IsInitialized() const {
-
-  return true;
-}
-
-void Trajectory::Swap(Trajectory* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void Trajectory::InternalSwap(Trajectory* other) {
-  pos_.UnsafeArenaSwap(&other->pos_);
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  std::swap(_cached_size_, other->_cached_size_);
-}
-
-::google::protobuf::Metadata Trajectory::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Trajectory_descriptor_;
-  metadata.reflection = Trajectory_reflection_;
-  return metadata;
-}
-
-#if PROTOBUF_INLINE_NOT_IN_HEADERS
-// Trajectory_Position
-
-// optional double x = 1;
-void Trajectory_Position::clear_x() {
-  x_ = 0;
-}
- double Trajectory_Position::x() const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.Position.x)
-  return x_;
-}
- void Trajectory_Position::set_x(double value) {
-  
-  x_ = value;
-  // @@protoc_insertion_point(field_set:plan.Trajectory.Position.x)
-}
-
-// optional double y = 2;
-void Trajectory_Position::clear_y() {
-  y_ = 0;
-}
- double Trajectory_Position::y() const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.Position.y)
-  return y_;
-}
- void Trajectory_Position::set_y(double value) {
-  
-  y_ = value;
-  // @@protoc_insertion_point(field_set:plan.Trajectory.Position.y)
-}
-
-// optional double z = 3;
-void Trajectory_Position::clear_z() {
-  z_ = 0;
-}
- double Trajectory_Position::z() const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.Position.z)
-  return z_;
-}
- void Trajectory_Position::set_z(double value) {
-  
-  z_ = value;
-  // @@protoc_insertion_point(field_set:plan.Trajectory.Position.z)
-}
-
-// -------------------------------------------------------------------
-
-// Trajectory
-
-// repeated .plan.Trajectory.Position pos = 1;
-int Trajectory::pos_size() const {
-  return pos_.size();
-}
-void Trajectory::clear_pos() {
-  pos_.Clear();
-}
-const ::plan::Trajectory_Position& Trajectory::pos(int index) const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.pos)
-  return pos_.Get(index);
-}
-::plan::Trajectory_Position* Trajectory::mutable_pos(int index) {
-  // @@protoc_insertion_point(field_mutable:plan.Trajectory.pos)
-  return pos_.Mutable(index);
-}
-::plan::Trajectory_Position* Trajectory::add_pos() {
-  // @@protoc_insertion_point(field_add:plan.Trajectory.pos)
-  return pos_.Add();
-}
-::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position >*
-Trajectory::mutable_pos() {
-  // @@protoc_insertion_point(field_mutable_list:plan.Trajectory.pos)
-  return &pos_;
-}
-const ::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position >&
-Trajectory::pos() const {
-  // @@protoc_insertion_point(field_list:plan.Trajectory.pos)
-  return pos_;
-}
-
-#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace plan
-
-// @@protoc_insertion_point(global_scope)
diff --git a/src/messages/trajectory.pb.h b/src/messages/trajectory.pb.h
deleted file mode 100644
index 2022abc..0000000
--- a/src/messages/trajectory.pb.h
+++ /dev/null
@@ -1,322 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: trajectory.proto
-
-#ifndef PROTOBUF_trajectory_2eproto__INCLUDED
-#define PROTOBUF_trajectory_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 3000000
-#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 3000000 < 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/arena.h>
-#include <google/protobuf/arenastring.h>
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/metadata.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-#include <google/protobuf/unknown_field_set.h>
-// @@protoc_insertion_point(includes)
-
-namespace plan {
-
-// Internal implementation detail -- do not call these.
-void protobuf_AddDesc_trajectory_2eproto();
-void protobuf_AssignDesc_trajectory_2eproto();
-void protobuf_ShutdownFile_trajectory_2eproto();
-
-class Trajectory;
-class Trajectory_Position;
-
-// ===================================================================
-
-class Trajectory_Position : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:plan.Trajectory.Position) */ {
- public:
-  Trajectory_Position();
-  virtual ~Trajectory_Position();
-
-  Trajectory_Position(const Trajectory_Position& from);
-
-  inline Trajectory_Position& operator=(const Trajectory_Position& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Trajectory_Position& default_instance();
-
-  void Swap(Trajectory_Position* other);
-
-  // implements Message ----------------------------------------------
-
-  inline Trajectory_Position* New() const { return New(NULL); }
-
-  Trajectory_Position* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Trajectory_Position& from);
-  void MergeFrom(const Trajectory_Position& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(Trajectory_Position* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional double x = 1;
-  void clear_x();
-  static const int kXFieldNumber = 1;
-  double x() const;
-  void set_x(double value);
-
-  // optional double y = 2;
-  void clear_y();
-  static const int kYFieldNumber = 2;
-  double y() const;
-  void set_y(double value);
-
-  // optional double z = 3;
-  void clear_z();
-  static const int kZFieldNumber = 3;
-  double z() const;
-  void set_z(double value);
-
-  // @@protoc_insertion_point(class_scope:plan.Trajectory.Position)
- private:
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  bool _is_default_instance_;
-  double x_;
-  double y_;
-  double z_;
-  mutable int _cached_size_;
-  friend void  protobuf_AddDesc_trajectory_2eproto();
-  friend void protobuf_AssignDesc_trajectory_2eproto();
-  friend void protobuf_ShutdownFile_trajectory_2eproto();
-
-  void InitAsDefaultInstance();
-  static Trajectory_Position* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Trajectory : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:plan.Trajectory) */ {
- public:
-  Trajectory();
-  virtual ~Trajectory();
-
-  Trajectory(const Trajectory& from);
-
-  inline Trajectory& operator=(const Trajectory& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Trajectory& default_instance();
-
-  void Swap(Trajectory* other);
-
-  // implements Message ----------------------------------------------
-
-  inline Trajectory* New() const { return New(NULL); }
-
-  Trajectory* New(::google::protobuf::Arena* arena) const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Trajectory& from);
-  void MergeFrom(const Trajectory& 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* InternalSerializeWithCachedSizesToArray(
-      bool deterministic, ::google::protobuf::uint8* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const {
-    return InternalSerializeWithCachedSizesToArray(false, output);
-  }
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  void InternalSwap(Trajectory* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return _internal_metadata_.arena();
-  }
-  inline void* MaybeArenaPtr() const {
-    return _internal_metadata_.raw_arena_ptr();
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  typedef Trajectory_Position Position;
-
-  // accessors -------------------------------------------------------
-
-  // repeated .plan.Trajectory.Position pos = 1;
-  int pos_size() const;
-  void clear_pos();
-  static const int kPosFieldNumber = 1;
-  const ::plan::Trajectory_Position& pos(int index) const;
-  ::plan::Trajectory_Position* mutable_pos(int index);
-  ::plan::Trajectory_Position* add_pos();
-  ::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position >*
-      mutable_pos();
-  const ::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position >&
-      pos() const;
-
-  // @@protoc_insertion_point(class_scope:plan.Trajectory)
- private:
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  bool _is_default_instance_;
-  ::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position > pos_;
-  mutable int _cached_size_;
-  friend void  protobuf_AddDesc_trajectory_2eproto();
-  friend void protobuf_AssignDesc_trajectory_2eproto();
-  friend void protobuf_ShutdownFile_trajectory_2eproto();
-
-  void InitAsDefaultInstance();
-  static Trajectory* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-#if !PROTOBUF_INLINE_NOT_IN_HEADERS
-// Trajectory_Position
-
-// optional double x = 1;
-inline void Trajectory_Position::clear_x() {
-  x_ = 0;
-}
-inline double Trajectory_Position::x() const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.Position.x)
-  return x_;
-}
-inline void Trajectory_Position::set_x(double value) {
-  
-  x_ = value;
-  // @@protoc_insertion_point(field_set:plan.Trajectory.Position.x)
-}
-
-// optional double y = 2;
-inline void Trajectory_Position::clear_y() {
-  y_ = 0;
-}
-inline double Trajectory_Position::y() const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.Position.y)
-  return y_;
-}
-inline void Trajectory_Position::set_y(double value) {
-  
-  y_ = value;
-  // @@protoc_insertion_point(field_set:plan.Trajectory.Position.y)
-}
-
-// optional double z = 3;
-inline void Trajectory_Position::clear_z() {
-  z_ = 0;
-}
-inline double Trajectory_Position::z() const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.Position.z)
-  return z_;
-}
-inline void Trajectory_Position::set_z(double value) {
-  
-  z_ = value;
-  // @@protoc_insertion_point(field_set:plan.Trajectory.Position.z)
-}
-
-// -------------------------------------------------------------------
-
-// Trajectory
-
-// repeated .plan.Trajectory.Position pos = 1;
-inline int Trajectory::pos_size() const {
-  return pos_.size();
-}
-inline void Trajectory::clear_pos() {
-  pos_.Clear();
-}
-inline const ::plan::Trajectory_Position& Trajectory::pos(int index) const {
-  // @@protoc_insertion_point(field_get:plan.Trajectory.pos)
-  return pos_.Get(index);
-}
-inline ::plan::Trajectory_Position* Trajectory::mutable_pos(int index) {
-  // @@protoc_insertion_point(field_mutable:plan.Trajectory.pos)
-  return pos_.Mutable(index);
-}
-inline ::plan::Trajectory_Position* Trajectory::add_pos() {
-  // @@protoc_insertion_point(field_add:plan.Trajectory.pos)
-  return pos_.Add();
-}
-inline ::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position >*
-Trajectory::mutable_pos() {
-  // @@protoc_insertion_point(field_mutable_list:plan.Trajectory.pos)
-  return &pos_;
-}
-inline const ::google::protobuf::RepeatedPtrField< ::plan::Trajectory_Position >&
-Trajectory::pos() const {
-  // @@protoc_insertion_point(field_list:plan.Trajectory.pos)
-  return pos_;
-}
-
-#endif  // !PROTOBUF_INLINE_NOT_IN_HEADERS
-// -------------------------------------------------------------------
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace plan
-
-// @@protoc_insertion_point(global_scope)
-
-#endif  // PROTOBUF_trajectory_2eproto__INCLUDED
-- 
GitLab