diff --git a/src/policy/.gitlab-ci.yml b/src/policy/.gitlab-ci.yml
index 13a071124e2cac693401e155412dee48e1f36b56..81571234123fa5a942b77f04e87a3c6c5956f34d 100644
--- a/src/policy/.gitlab-ci.yml
+++ b/src/policy/.gitlab-ci.yml
@@ -3,13 +3,16 @@ build policy:
   variables:
     IMAGE_NAME: 'policy' # name of the microservice
     IMAGE_NAME_TEST: 'policy-test' # name of the microservice
-    IMAGE_TAG: '0.0.1' # tag of the container image (production, development, etc)
+    IMAGE_TAG: '0.1.0' # tag of the container image (production, development, etc)
   stage: build
   script:
     - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target builder
   rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
         - src/$IMAGE_NAME/**
+        - manifests/${IMAGE_NAME}service.yaml
         - .gitlab-ci.yml
 
 # Run tests, build & push the image
@@ -17,7 +20,7 @@ unit_test policy:
   variables:
     IMAGE_NAME: 'policy' # name of the microservice
     IMAGE_NAME_TEST: 'policy-test' # name of the microservice
-    IMAGE_TAG: '0.0.1' # tag of the container image (production, development, etc)
+    IMAGE_TAG: '0.1.0' # tag of the container image (production, development, etc)
   stage: unit_test
   needs:
     - build policy
@@ -29,8 +32,11 @@ unit_test policy:
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
         - src/$IMAGE_NAME/**
+        - manifests/${IMAGE_NAME}service.yaml
         - .gitlab-ci.yml
 
 # Deployment of policy service in Kubernetes Cluster
@@ -42,6 +48,12 @@ deploy policy:
   script:
     - kubectl version
     - kubectl get all
+    - kubectl delete --ignore-not-found=true -f "manifests/policyservice.yaml"
     - kubectl apply -f "manifests/policyservice.yaml"
     - kubectl delete pods --selector app=policyservice
-    - kubectl get all
\ No newline at end of file
+    - kubectl get all
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
+      when: manual
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
+      when: manual
\ No newline at end of file
diff --git a/src/policy/pom.xml b/src/policy/pom.xml
index 399c3a18c8f4fb62c42290191f59b179b1f0f2c3..79d5a46c6ff7fed8099325b939f9de5f6227e643 100644
--- a/src/policy/pom.xml
+++ b/src/policy/pom.xml
@@ -5,7 +5,7 @@
 
     <groupId>eu.teraflow</groupId>
     <artifactId>policy</artifactId>
-    <version>0.0.1</version>
+    <version>0.1.0</version>
     <name>TeraFlow Policy Component</name>
     <description>TeraFlow Policy Component</description>
 
diff --git a/src/policy/src/main/proto/kpi_sample_types.proto b/src/policy/src/main/proto/kpi_sample_types.proto
new file mode 120000
index 0000000000000000000000000000000000000000..98e748bbf4fbadbc04c3657f458d733f1bc7bdb8
--- /dev/null
+++ b/src/policy/src/main/proto/kpi_sample_types.proto
@@ -0,0 +1 @@
+../../../../../proto/kpi_sample_types.proto
\ No newline at end of file
diff --git a/src/policy/src/main/resources/application.yml b/src/policy/src/main/resources/application.yml
index 45c42a3c15c5c1b5521cdc4b55e2f472c7728640..27f1efdf42114986166a70b49044c4218d61289b 100644
--- a/src/policy/src/main/resources/application.yml
+++ b/src/policy/src/main/resources/application.yml
@@ -8,12 +8,11 @@ quarkus:
   container-image:
     group: teraflow-h2020
     name: controller/policy
-    tag: 0.0.1
     registry: registry.gitlab.com
   kubernetes:
     name: policyservice
     image-pull-policy: Always
-    service-type: NodePort
+    add-version-to-label-selectors: false
     labels:
       app: policyservice
     readiness-probe:
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index 473bfa689e1a6df4d08ed8ddb76c746969f317dd..168ddf78b3a0233f3157e984fb7d925783bcd3b0 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -27653,79 +27653,49 @@ public final class ContextOuterClass {
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    boolean hasTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    context.ContextOuterClass.TopologyId getTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
-
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
-    /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
-    boolean hasEndpointUuid();
+    boolean hasConnectionUuid();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
-    context.ContextOuterClass.Uuid getEndpointUuid();
+    context.ContextOuterClass.Uuid getConnectionUuid();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
   }
   /**
    * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * ----- Connection ----------------------------------------------------------------------------------------------------
    * </pre>
    *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.ConnectionId}
    */
-  public static final class EndPointId extends
+  public static final class ConnectionId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private ConnectionId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new ConnectionId();
     }
 
     @java.lang.Override
@@ -27733,7 +27703,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private ConnectionId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -27752,40 +27722,14 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
               context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (endpointUuid_ != null) {
-                subBuilder = endpointUuid_.toBuilder();
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
               }
-              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointUuid_);
-                endpointUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -27811,93 +27755,41 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
-    }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
-    }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
     }
 
-    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.Uuid endpointUuid_;
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointUuid() {
-      return endpointUuid_ != null;
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getEndpointUuid() {
-      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -27914,14 +27806,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -27932,17 +27818,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
+      if (connectionUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeMessageSize(1, getConnectionUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -27954,25 +27832,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -27985,86 +27853,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
-      }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      if (hasEndpointUuid()) {
-        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointUuid().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -28077,7 +27937,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -28094,29 +27954,29 @@ public final class ContextOuterClass {
     }
     /**
      * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * ----- Connection ----------------------------------------------------------------------------------------------------
      * </pre>
      *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.ConnectionId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPointId)
-        context.ContextOuterClass.EndPointIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -28134,23 +27994,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
         return this;
       }
@@ -28158,17 +28006,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -28176,22 +28024,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId buildPartial() {
-        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
-        } else {
-          result.topologyId_ = topologyIdBuilder_.build();
-        }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
         } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
+          result.connectionUuid_ = connectionUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -28231,24 +28069,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPointId) {
-          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
-        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
-        }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (other.hasEndpointUuid()) {
-          mergeEndpointUuid(other.getEndpointUuid());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -28265,11 +28097,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPointId parsedMessage = null;
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -28279,366 +28111,128 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.TopologyId topologyId_;
+      private context.ContextOuterClass.Uuid connectionUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return topologyIdBuilder_.getMessage();
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyId_ = value;
+          connectionUuid_ = value;
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          connectionUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          connectionUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
           } else {
-            topologyId_ = value;
+            connectionUuid_ = value;
           }
           onChanged();
         } else {
-          topologyIdBuilder_.mergeFrom(value);
+          connectionUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
           onChanged();
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
         
         onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+        return getConnectionUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
         } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
                   getParentForChildren(),
                   isClean());
-          topologyId_ = null;
+          connectionUuid_ = null;
         }
-        return topologyIdBuilder_;
-      }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+        return connectionUuidBuilder_;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
-        }
-        return deviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.Uuid endpointUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
-       */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
-       */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        } else {
-          return endpointUuidBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointUuid_ = value;
-          onChanged();
-        } else {
-          endpointUuidBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
-          } else {
-            endpointUuid_ = value;
-          }
-          onChanged();
-        } else {
-          endpointUuidBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
-          onChanged();
-        } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
-        
-        onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        }
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getEndpointUuidFieldBuilder() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getEndpointUuid(),
-                  getParentForChildren(),
-                  isClean());
-          endpointUuid_ = null;
-        }
-        return endpointUuidBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
       @java.lang.Override
@@ -28648,98 +28242,150 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPointId>
-        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new ConnectionId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
-    boolean hasEndpointId();
+    boolean hasConnectionId();
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.EndPointId getEndpointId();
+    context.ContextOuterClass.ConnectionId getConnectionId();
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
 
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    java.lang.String getEndpointType();
+    boolean hasServiceId();
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    com.google.protobuf.ByteString
-        getEndpointTypeBytes();
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathHopsEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    int getPathHopsEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSubServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    int getSubServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.Connection}
    */
-  public static final class EndPoint extends
+  public static final class Connection extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
+    private Connection() {
+      pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      subServiceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new Connection();
     }
 
     @java.lang.Override
@@ -28747,7 +28393,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private Connection(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -28755,6 +28401,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -28766,22 +28413,47 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
               }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
 
-              endpointType_ = s;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              pathHopsEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              subServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -28799,85 +28471,159 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
-    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object endpointType_;
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public java.lang.String getEndpointType() {
-      java.lang.Object ref = endpointType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        endpointType_ = s;
-        return s;
-      }
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getEndpointTypeBytes() {
-      java.lang.Object ref = endpointType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        endpointType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathHopsEndpointIdsCount() {
+      return pathHopsEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index) {
+      return subServiceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -28894,11 +28640,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
       }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        output.writeMessage(4, subServiceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -28909,12 +28661,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
+      if (connectionId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
+          .computeMessageSize(1, getConnectionId());
       }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, subServiceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -28926,18 +28687,25 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getPathHopsEndpointIdsList()
+          .equals(other.getPathHopsEndpointIdsList())) return false;
+      if (!getSubServiceIdsList()
+          .equals(other.getSubServiceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -28949,80 +28717,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (getPathHopsEndpointIdsCount() > 0) {
+        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      }
+      if (getSubServiceIdsCount() > 0) {
+        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSubServiceIdsList().hashCode();
       }
-      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndpointType().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -29035,7 +28813,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -29051,26 +28829,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.Connection}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPoint)
-        context.ContextOuterClass.EndPointOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -29083,36 +28861,54 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getPathHopsEndpointIdsFieldBuilder();
+          getSubServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          subServiceIdsBuilder_.clear();
         }
-        endpointType_ = "";
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -29120,14 +28916,37 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint buildPartial() {
-        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
         } else {
-          result.endpointId_ = endpointIdBuilder_.build();
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
+        } else {
+          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.subServiceIds_ = subServiceIds_;
+        } else {
+          result.subServiceIds_ = subServiceIdsBuilder_.build();
         }
-        result.endpointType_ = endpointType_;
         onBuilt();
         return result;
       }
@@ -29166,22 +28985,73 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
-        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
-        if (!other.getEndpointType().isEmpty()) {
-          endpointType_ = other.endpointType_;
-          onChanged();
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIds_.isEmpty()) {
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathHopsEndpointIdsIsMutable();
+              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
+              pathHopsEndpointIdsBuilder_.dispose();
+              pathHopsEndpointIdsBuilder_ = null;
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathHopsEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathHopsEndpointIdsFieldBuilder() : null;
+            } else {
+              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
+            }
+          }
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIds_.isEmpty()) {
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSubServiceIdsIsMutable();
+              subServiceIds_.addAll(other.subServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIdsBuilder_.isEmpty()) {
+              subServiceIdsBuilder_.dispose();
+              subServiceIdsBuilder_ = null;
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              subServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubServiceIdsFieldBuilder() : null;
+            } else {
+              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -29198,11 +29068,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
+        context.ContextOuterClass.Connection parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -29211,316 +29081,1620 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.EndPointId endpointId_;
+      private context.ContextOuterClass.ConnectionId connectionId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
        */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          return endpointIdBuilder_.getMessage();
+          return connectionIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointId_ = value;
+          connectionId_ = value;
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          connectionIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
           } else {
-            endpointId_ = value;
+            connectionId_ = value;
           }
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          connectionIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
           onChanged();
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
         
         onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
         } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          connectionId_ = null;
         }
-        return endpointIdBuilder_;
+        return connectionIdBuilder_;
       }
 
-      private java.lang.Object endpointType_ = "";
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The endpointType.
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
        */
-      public java.lang.String getEndpointType() {
-        java.lang.Object ref = endpointType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          endpointType_ = s;
-          return s;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          return (java.lang.String) ref;
+          return serviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The bytes for endpointType.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getEndpointTypeBytes() {
-        java.lang.Object ref = endpointType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          endpointType_ = b;
-          return b;
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          serviceIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder clearEndpointType() {
-        
-        endpointType_ = getDefaultInstance().getEndpointType();
-        onChanged();
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
-        endpointType_ = value;
         onChanged();
-        return this;
+        return getServiceIdFieldBuilder().getBuilder();
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
       }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
       }
 
-
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
-    }
-
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<EndPoint>
-        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
-      @java.lang.Override
-      public EndPoint parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensurePathHopsEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
-    };
-
-    public static com.google.protobuf.Parser<EndPoint> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ConfigRuleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    int getActionValue();
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    context.ContextOuterClass.ConfigActionEnum getAction();
 
-    /**
-     * <code>string resource_key = 2;</code>
-     * @return The resourceKey.
-     */
-    java.lang.String getResourceKey();
-    /**
-     * <code>string resource_key = 2;</code>
-     * @return The bytes for resourceKey.
-     */
-    com.google.protobuf.ByteString
-        getResourceKeyBytes();
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
 
-    /**
-     * <code>string resource_value = 3;</code>
-     * @return The resourceValue.
-     */
-    java.lang.String getResourceValue();
-    /**
-     * <code>string resource_value = 3;</code>
-     * @return The bytes for resourceValue.
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
+        } else {
+          return pathHopsEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addAllPathHopsEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, pathHopsEndpointIds_);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder clearPathHopsEndpointIds() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder removePathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+          int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);  } else {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathHopsEndpointIdsOrBuilderList() {
+        if (pathHopsEndpointIdsBuilder_ != null) {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathHopsEndpointIdsBuilderList() {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathHopsEndpointIdsFieldBuilder() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  pathHopsEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          pathHopsEndpointIds_ = null;
+        }
+        return pathHopsEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSubServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+        if (subServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        } else {
+          return subServiceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public int getSubServiceIdsCount() {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.size();
+        } else {
+          return subServiceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);
+        } else {
+          return subServiceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addAllSubServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subServiceIds_);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder clearSubServiceIds() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+          int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);  } else {
+          return subServiceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSubServiceIdsOrBuilderList() {
+        if (subServiceIdsBuilder_ != null) {
+          return subServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSubServiceIdsBuilderList() {
+        return getSubServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSubServiceIdsFieldBuilder() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  subServiceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subServiceIds_ = null;
+        }
+        return subServiceIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Connection)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+    }
+
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+      @java.lang.Override
+      public Connection parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Connection(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Connection> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Connection> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    int getConnectionIdsCount();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionIdList}
+   */
+  public static final class ConnectionIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+    }
+
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connectionIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
+        } else {
+          result.connectionIds_ = connectionIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
+        } else {
+          return connectionIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
+        } else {
+          return connectionIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
+        } else {
+          return connectionIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(connectionIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          connectionIds_ = null;
+        }
+        return connectionIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+      @java.lang.Override
+      public ConnectionIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getResourceValueBytes();
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    context.ContextOuterClass.Connection getConnections(int index);
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    int getConnectionsCount();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.ConfigRule}
+   * Protobuf type {@code context.ConnectionList}
    */
-  public static final class ConfigRule extends
+  public static final class ConnectionList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule)
-      ConfigRuleOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule.newBuilder() to construct.
-    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule() {
-      action_ = 0;
-      resourceKey_ = "";
-      resourceValue_ = "";
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule();
+      return new ConnectionList();
     }
 
     @java.lang.Override
@@ -29528,7 +30702,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule(
+    private ConnectionList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -29536,6 +30710,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -29546,22 +30721,13 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
-
-              action_ = rawValue;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              resourceKey_ = s;
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              resourceValue_ = s;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -29579,116 +30745,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connections_ = java.util.Collections.unmodifiableList(connections_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
-    }
-
-    public static final int ACTION_FIELD_NUMBER = 1;
-    private int action_;
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    @java.lang.Override public int getActionValue() {
-      return action_;
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
     }
+
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
     }
-
-    public static final int RESOURCE_KEY_FIELD_NUMBER = 2;
-    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>string resource_key = 2;</code>
-     * @return The resourceKey.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.lang.String getResourceKey() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceKey_ = s;
-        return s;
-      }
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
     }
     /**
-     * <code>string resource_key = 2;</code>
-     * @return The bytes for resourceKey.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceKeyBytes() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceKey_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getConnectionsCount() {
+      return connections_.size();
     }
-
-    public static final int RESOURCE_VALUE_FIELD_NUMBER = 3;
-    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The resourceValue.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.lang.String getResourceValue() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceValue_ = s;
-        return s;
-      }
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
     }
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The bytes for resourceValue.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceValueBytes() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index) {
+      return connections_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -29705,14 +30819,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        output.writeEnum(1, action_);
-      }
-      if (!getResourceKeyBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceKey_);
-      }
-      if (!getResourceValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, resourceValue_);
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -29723,15 +30831,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+      for (int i = 0; i < connections_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, action_);
-      }
-      if (!getResourceKeyBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceKey_);
-      }
-      if (!getResourceValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, resourceValue_);
+          .computeMessageSize(1, connections_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -29743,16 +30845,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
 
-      if (action_ != other.action_) return false;
-      if (!getResourceKey()
-          .equals(other.getResourceKey())) return false;
-      if (!getResourceValue()
-          .equals(other.getResourceValue())) return false;
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -29764,80 +30863,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ACTION_FIELD_NUMBER;
-      hash = (53 * hash) + action_;
-      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceKey().hashCode();
-      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceValue().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -29850,7 +30947,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -29866,26 +30963,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule}
+     * Protobuf type {@code context.ConnectionList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
-        context.ContextOuterClass.ConfigRuleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -29898,34 +30995,35 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        action_ = 0;
-
-        resourceKey_ = "";
-
-        resourceValue_ = "";
-
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionsBuilder_.clear();
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule build() {
-        context.ContextOuterClass.ConfigRule result = buildPartial();
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -29933,11 +31031,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule buildPartial() {
-        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-        result.action_ = action_;
-        result.resourceKey_ = resourceKey_;
-        result.resourceValue_ = resourceValue_;
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connections_ = java.util.Collections.unmodifiableList(connections_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connections_ = connections_;
+        } else {
+          result.connections_ = connectionsBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -29976,26 +31081,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
-        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
-        if (other.action_ != 0) {
-          setActionValue(other.getActionValue());
-        }
-        if (!other.getResourceKey().isEmpty()) {
-          resourceKey_ = other.resourceKey_;
-          onChanged();
-        }
-        if (!other.getResourceValue().isEmpty()) {
-          resourceValue_ = other.resourceValue_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionsFieldBuilder() : null;
+            } else {
+              connectionsBuilder_.addAllMessages(other.connections_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -30012,11 +31132,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule parsedMessage = null;
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -30025,211 +31145,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
-      private int action_ = 0;
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The enum numeric value on the wire for action.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      @java.lang.Override public int getActionValue() {
-        return action_;
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
+        } else {
+          return connectionsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The enum numeric value on the wire for action to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setActionValue(int value) {
-        
-        action_ = value;
-        onChanged();
-        return this;
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
+        } else {
+          return connectionsBuilder_.getCount();
+        }
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The action.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigActionEnum getAction() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
+        } else {
+          return connectionsBuilder_.getMessage(index);
+        }
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The action to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
+          onChanged();
+        } else {
+          connectionsBuilder_.setMessage(index, value);
         }
-        
-        action_ = value.getNumber();
-        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearAction() {
-        
-        action_ = 0;
-        onChanged();
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.setMessage(index, builderForValue.build());
+        }
         return this;
       }
-
-      private java.lang.Object resourceKey_ = "";
       /**
-       * <code>string resource_key = 2;</code>
-       * @return The resourceKey.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.lang.String getResourceKey() {
-        java.lang.Object ref = resourceKey_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceKey_ = s;
-          return s;
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.add(value);
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          connectionsBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>string resource_key = 2;</code>
-       * @return The bytes for resourceKey.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceKeyBytes() {
-        java.lang.Object ref = resourceKey_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceKey_ = b;
-          return b;
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          connectionsBuilder_.addMessage(index, value);
         }
+        return this;
       }
       /**
-       * <code>string resource_key = 2;</code>
-       * @param value The resourceKey to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setResourceKey(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceKey_ = value;
-        onChanged();
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(builderForValue.build());
+        }
         return this;
       }
       /**
-       * <code>string resource_key = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearResourceKey() {
-        
-        resourceKey_ = getDefaultInstance().getResourceKey();
-        onChanged();
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(index, builderForValue.build());
+        }
         return this;
       }
       /**
-       * <code>string resource_key = 2;</code>
-       * @param value The bytes for resourceKey to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setResourceKeyBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceKey_ = value;
-        onChanged();
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connections_);
+          onChanged();
+        } else {
+          connectionsBuilder_.addAllMessages(values);
+        }
         return this;
       }
-
-      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>string resource_value = 3;</code>
-       * @return The resourceValue.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.lang.String getResourceValue() {
-        java.lang.Object ref = resourceValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceValue_ = s;
-          return s;
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          connectionsBuilder_.clear();
         }
+        return this;
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @return The bytes for resourceValue.
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
+          onChanged();
+        } else {
+          connectionsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
+          int index) {
+        return getConnectionsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+          int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceValueBytes() {
-        java.lang.Object ref = resourceValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceValue_ = b;
-          return b;
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return java.util.Collections.unmodifiableList(connections_);
         }
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @param value The resourceValue to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setResourceValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceValue_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearResourceValue() {
-        
-        resourceValue_ = getDefaultInstance().getResourceValue();
-        onChanged();
-        return this;
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
+          int index) {
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @param value The bytes for resourceValue to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setResourceValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceValue_ = value;
-        onChanged();
-        return this;
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          connections_ = null;
+        }
+        return connectionsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -30244,100 +31399,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule)
-    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
     }
 
-    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
       @java.lang.Override
-      public ConfigRule parsePartialFrom(
+      public ConnectionList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule(input, extensionRegistry);
+        return new ConnectionList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule> parser() {
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConstraintOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint)
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.lang.String getConstraintType();
+    boolean hasEvent();
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    com.google.protobuf.ByteString
-        getConstraintTypeBytes();
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
-    java.lang.String getConstraintValue();
+    boolean hasConnectionId();
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
-    com.google.protobuf.ByteString
-        getConstraintValueBytes();
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Constraint ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.Constraint}
+   * Protobuf type {@code context.ConnectionEvent}
    */
-  public static final class Constraint extends
+  public static final class ConnectionEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint)
-      ConstraintOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint.newBuilder() to construct.
-    private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint() {
-      constraintType_ = "";
-      constraintValue_ = "";
+    private ConnectionEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint();
+      return new ConnectionEvent();
     }
 
     @java.lang.Override
@@ -30345,7 +31500,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint(
+    private ConnectionEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -30364,15 +31519,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
 
-              constraintType_ = s;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
 
-              constraintValue_ = s;
               break;
             }
             default: {
@@ -30396,91 +31565,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
     }
 
-    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object constraintType_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.lang.String getConstraintType() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintType_ = s;
-        return s;
-      }
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintTypeBytes() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
 
-    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object constraintValue_;
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public java.lang.String getConstraintValue() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintValue_ = s;
-        return s;
-      }
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintValueBytes() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -30497,11 +31642,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getConstraintTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
       }
       unknownFields.writeTo(output);
     }
@@ -30512,11 +31657,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getConstraintTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getConnectionId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -30528,15 +31675,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
 
-      if (!getConstraintType()
-          .equals(other.getConstraintType())) return false;
-      if (!getConstraintValue()
-          .equals(other.getConstraintValue())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -30548,78 +31701,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintType().hashCode();
-      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintValue().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -30632,7 +31789,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -30648,30 +31805,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Constraint ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.Constraint}
+     * Protobuf type {@code context.ConnectionEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint)
-        context.ContextOuterClass.ConstraintOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
+        context.ContextOuterClass.ConnectionEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -30689,27 +31842,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        constraintType_ = "";
-
-        constraintValue_ = "";
-
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint build() {
-        context.ContextOuterClass.Constraint result = buildPartial();
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -30717,10 +31878,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint buildPartial() {
-        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
-        result.constraintType_ = constraintType_;
-        result.constraintValue_ = constraintValue_;
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -30759,23 +31928,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint) {
-          return mergeFrom((context.ContextOuterClass.Constraint)other);
+        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
-        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
-        if (!other.getConstraintType().isEmpty()) {
-          constraintType_ = other.constraintType_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
+        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
-        if (!other.getConstraintValue().isEmpty()) {
-          constraintValue_ = other.constraintValue_;
-          onChanged();
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -30792,11 +31959,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint parsedMessage = null;
+        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -30806,156 +31973,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object constraintType_ = "";
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return The constraintType.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public java.lang.String getConstraintType() {
-        java.lang.Object ref = constraintType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintType_ = s;
-          return s;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return (java.lang.String) ref;
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return The bytes for constraintType.
+       * <code>.context.Event event = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getConstraintTypeBytes() {
-        java.lang.Object ref = constraintType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintType_ = b;
-          return b;
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
         }
+        return eventBuilder_;
       }
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The constraintType to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public Builder setConstraintType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintType_ = value;
-        onChanged();
-        return this;
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
        */
-      public Builder clearConstraintType() {
-        
-        constraintType_ = getDefaultInstance().getConstraintType();
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The bytes for constraintType to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setConstraintTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintType_ = value;
-        onChanged();
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
-
-      private java.lang.Object constraintValue_ = "";
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The constraintValue.
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.lang.String getConstraintValue() {
-        java.lang.Object ref = constraintValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintValue_ = s;
-          return s;
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The bytes for constraintValue.
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getConstraintValueBytes() {
-        java.lang.Object ref = constraintValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintValue_ = b;
-          return b;
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          connectionIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The constraintValue to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setConstraintValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintValue_ = value;
-        onChanged();
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearConstraintValue() {
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
         
-        constraintValue_ = getDefaultInstance().getConstraintValue();
         onChanged();
-        return this;
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The bytes for constraintValue to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setConstraintValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintValue_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -30970,89 +32223,119 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint)
-    private static final context.ContextOuterClass.Constraint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
     }
 
-    public static context.ContextOuterClass.Constraint getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
       @java.lang.Override
-      public Constraint parsePartialFrom(
+      public ConnectionEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint(input, extensionRegistry);
+        return new ConnectionEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint> parser() {
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
-    boolean hasConnectionUuid();
+    boolean hasTopologyId();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    context.ContextOuterClass.TopologyId getTopologyId();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    boolean hasEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    context.ContextOuterClass.Uuid getEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
   }
   /**
    * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
    * </pre>
    *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.EndPointId}
    */
-  public static final class ConnectionId extends
+  public static final class EndPointId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private EndPointId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new EndPointId();
     }
 
     @java.lang.Override
@@ -31060,7 +32343,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private EndPointId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -31078,15 +32361,41 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
+            case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
               context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.toBuilder();
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
               }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -31110,481 +32419,831 @@ public final class ContextOuterClass {
         makeExtensionsImmutable();
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
-    /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
-     */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
-    /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
-     */
+
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
      */
-    @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
-    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (connectionUuid_ != null) {
-        output.writeMessage(1, getConnectionUuid());
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
+        }
+        return this;
       }
-      unknownFields.writeTo(output);
-    }
 
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      }
 
-      size = 0;
-      if (connectionUuid_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
 
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
-        return super.equals(obj);
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) return false;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
 
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionUuid()) {
-        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionUuid().hashCode();
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPointId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
 
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
 
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
 
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ConnectionId}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
-        context.ContextOuterClass.ConnectionIdOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return this;
       }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+        return this;
       }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          deviceIdBuilder_.setMessage(value);
         }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
-      }
 
-      @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
-        return result;
-      }
 
-      @java.lang.Override
-      public context.ContextOuterClass.ConnectionId buildPartial() {
-        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
-        if (connectionUuidBuilder_ == null) {
-          result.connectionUuid_ = connectionUuid_;
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
         } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
+          deviceIdBuilder_.mergeFrom(value);
         }
-        onBuilt();
-        return result;
-      }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionId) {
-          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
-      }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
-        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
-        if (other.hasConnectionUuid()) {
-          mergeConnectionUuid(other.getConnectionUuid());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionId parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
-        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid connectionUuid_;
+      private context.ContextOuterClass.Uuid endpointUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          return connectionUuidBuilder_.getMessage();
+          return endpointUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionUuid_ = value;
+          endpointUuid_ = value;
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(value);
+          endpointUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionUuid(
+      public Builder setEndpointUuid(
           context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
+          endpointUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (connectionUuid_ != null) {
-            connectionUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
           } else {
-            connectionUuid_ = value;
+            endpointUuid_ = value;
           }
           onChanged();
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          endpointUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
           onChanged();
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
         
         onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
         } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getConnectionUuidFieldBuilder() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getConnectionUuid(),
+                  getEndpointUuid(),
                   getParentForChildren(),
                   isClean());
-          connectionUuid_ = null;
+          endpointUuid_ = null;
         }
-        return connectionUuidBuilder_;
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -31599,125 +33258,128 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionId>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasConnectionId();
+    boolean hasEndpointId();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.ServiceId related_service_id = 2;</code>
-     * @return Whether the relatedServiceId field is set.
-     */
-    boolean hasRelatedServiceId();
-    /**
-     * <code>.context.ServiceId related_service_id = 2;</code>
-     * @return The relatedServiceId.
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
-    context.ContextOuterClass.ServiceId getRelatedServiceId();
+    java.lang.String getEndpointType();
     /**
-     * <code>.context.ServiceId related_service_id = 2;</code>
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder();
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
 
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getPathList();
+    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
      */
-    context.ContextOuterClass.EndPointId getPath(int index);
+    int getKpiSampleTypesCount();
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
      */
-    int getPathCount();
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathOrBuilderList();
+    java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList();
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
-        int index);
+    int getKpiSampleTypesValue(int index);
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class Connection extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      path_ = java.util.Collections.emptyList();
+    private EndPoint() {
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -31725,7 +33387,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -31745,38 +33407,45 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (relatedServiceId_ != null) {
-                subBuilder = relatedServiceId_.toBuilder();
-              }
-              relatedServiceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(relatedServiceId_);
-                relatedServiceId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endpointType_ = s;
               break;
             }
-            case 26: {
+            case 24: {
+              int rawValue = input.readEnum();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                path_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              path_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              kpiSampleTypes_.add(rawValue);
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                kpiSampleTypes_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
               break;
             }
             default: {
@@ -31795,7 +33464,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          path_ = java.util.Collections.unmodifiableList(path_);
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -31803,108 +33472,138 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int RELATED_SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId relatedServiceId_;
-    /**
-     * <code>.context.ServiceId related_service_id = 2;</code>
-     * @return Whether the relatedServiceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasRelatedServiceId() {
-      return relatedServiceId_ != null;
-    }
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
     /**
-     * <code>.context.ServiceId related_service_id = 2;</code>
-     * @return The relatedServiceId.
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getRelatedServiceId() {
-      return relatedServiceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.ServiceId related_service_id = 2;</code>
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder() {
-      return getRelatedServiceId();
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    public static final int PATH_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> path_;
+    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> kpiSampleTypes_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
+              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+              }
+            };
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getPathList() {
-      return path_;
+    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
     }
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathOrBuilderList() {
-      return path_;
+    public int getKpiSampleTypesCount() {
+      return kpiSampleTypes_.size();
     }
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public int getPathCount() {
-      return path_.size();
+    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
     }
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getPath(int index) {
-      return path_.get(index);
+    public java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList() {
+      return kpiSampleTypes_;
     }
     /**
-     * <code>repeated .context.EndPointId path = 3;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
-        int index) {
-      return path_.get(index);
+    public int getKpiSampleTypesValue(int index) {
+      return kpiSampleTypes_.get(index);
     }
+    private int kpiSampleTypesMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -31920,14 +33619,19 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionId_ != null) {
-        output.writeMessage(1, getConnectionId());
+      getSerializedSize();
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
       }
-      if (relatedServiceId_ != null) {
-        output.writeMessage(2, getRelatedServiceId());
+      if (getKpiSampleTypesList().size() > 0) {
+        output.writeUInt32NoTag(26);
+        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
       }
-      for (int i = 0; i < path_.size(); i++) {
-        output.writeMessage(3, path_.get(i));
+      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+        output.writeEnumNoTag(kpiSampleTypes_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -31938,17 +33642,24 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionId_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionId());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (relatedServiceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getRelatedServiceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
       }
-      for (int i = 0; i < path_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, path_.get(i));
+      {
+        int dataSize = 0;
+        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
+        }
+        size += dataSize;
+        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }kpiSampleTypesMemoizedSerializedSize = dataSize;
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -31960,23 +33671,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
-      }
-      if (hasRelatedServiceId() != other.hasRelatedServiceId()) return false;
-      if (hasRelatedServiceId()) {
-        if (!getRelatedServiceId()
-            .equals(other.getRelatedServiceId())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
-      if (!getPathList()
-          .equals(other.getPathList())) return false;
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -31988,86 +33695,84 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
-      }
-      if (hasRelatedServiceId()) {
-        hash = (37 * hash) + RELATED_SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getRelatedServiceId().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (getPathCount() > 0) {
-        hash = (37 * hash) + PATH_FIELD_NUMBER;
-        hash = (53 * hash) + getPathList().hashCode();
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      if (getKpiSampleTypesCount() > 0) {
+        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
+        hash = (53 * hash) + kpiSampleTypes_.hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -32080,7 +33785,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -32096,26 +33801,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Connection}
+     * Protobuf type {@code context.EndPoint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Connection)
-        context.ContextOuterClass.ConnectionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -32128,47 +33833,38 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPathFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-        if (relatedServiceIdBuilder_ == null) {
-          relatedServiceId_ = null;
-        } else {
-          relatedServiceId_ = null;
-          relatedServiceIdBuilder_ = null;
-        }
-        if (pathBuilder_ == null) {
-          path_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          pathBuilder_.clear();
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+        endpointType_ = "";
+
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
-        return context.ContextOuterClass.Connection.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection build() {
-        context.ContextOuterClass.Connection result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -32176,28 +33872,20 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection buildPartial() {
-        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
         int from_bitField0_ = bitField0_;
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
-        } else {
-          result.connectionId_ = connectionIdBuilder_.build();
-        }
-        if (relatedServiceIdBuilder_ == null) {
-          result.relatedServiceId_ = relatedServiceId_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.relatedServiceId_ = relatedServiceIdBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (pathBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            path_ = java.util.Collections.unmodifiableList(path_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.path_ = path_;
-        } else {
-          result.path_ = pathBuilder_.build();
+        result.endpointType_ = endpointType_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
         }
+        result.kpiSampleTypes_ = kpiSampleTypes_;
         onBuilt();
         return result;
       }
@@ -32236,554 +33924,396 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Connection) {
-          return mergeFrom((context.ContextOuterClass.Connection)other);
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
-        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        if (other.hasRelatedServiceId()) {
-          mergeRelatedServiceId(other.getRelatedServiceId());
-        }
-        if (pathBuilder_ == null) {
-          if (!other.path_.isEmpty()) {
-            if (path_.isEmpty()) {
-              path_ = other.path_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensurePathIsMutable();
-              path_.addAll(other.path_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.path_.isEmpty()) {
-            if (pathBuilder_.isEmpty()) {
-              pathBuilder_.dispose();
-              pathBuilder_ = null;
-              path_ = other.path_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              pathBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPathFieldBuilder() : null;
-            } else {
-              pathBuilder_.addAllMessages(other.path_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Connection parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private context.ContextOuterClass.ConnectionId connectionId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return Whether the connectionId field is set.
-       */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return The connectionId.
-       */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        } else {
-          return connectionIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionId_ = value;
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
-          } else {
-            connectionId_ = value;
-          }
-          onChanged();
-        } else {
-          connectionIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
           onChanged();
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
         }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
-        
+        if (!other.kpiSampleTypes_.isEmpty()) {
+          if (kpiSampleTypes_.isEmpty()) {
+            kpiSampleTypes_ = other.kpiSampleTypes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureKpiSampleTypesIsMutable();
+            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+          }
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return this;
       }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
-                  getParentForChildren(),
-                  isClean());
-          connectionId_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPoint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return connectionIdBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.ServiceId relatedServiceId_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> relatedServiceIdBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
-       * @return Whether the relatedServiceId field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasRelatedServiceId() {
-        return relatedServiceIdBuilder_ != null || relatedServiceId_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
-       * @return The relatedServiceId.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.ServiceId getRelatedServiceId() {
-        if (relatedServiceIdBuilder_ == null) {
-          return relatedServiceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return relatedServiceIdBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRelatedServiceId(context.ContextOuterClass.ServiceId value) {
-        if (relatedServiceIdBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          relatedServiceId_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          relatedServiceIdBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRelatedServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (relatedServiceIdBuilder_ == null) {
-          relatedServiceId_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          relatedServiceIdBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder mergeRelatedServiceId(context.ContextOuterClass.ServiceId value) {
-        if (relatedServiceIdBuilder_ == null) {
-          if (relatedServiceId_ != null) {
-            relatedServiceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(relatedServiceId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            relatedServiceId_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          relatedServiceIdBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearRelatedServiceId() {
-        if (relatedServiceIdBuilder_ == null) {
-          relatedServiceId_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          relatedServiceId_ = null;
-          relatedServiceIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getRelatedServiceIdBuilder() {
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
         onChanged();
-        return getRelatedServiceIdFieldBuilder().getBuilder();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder() {
-        if (relatedServiceIdBuilder_ != null) {
-          return relatedServiceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          return relatedServiceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
       }
       /**
-       * <code>.context.ServiceId related_service_id = 2;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getRelatedServiceIdFieldBuilder() {
-        if (relatedServiceIdBuilder_ == null) {
-          relatedServiceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getRelatedServiceId(),
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
                   getParentForChildren(),
                   isClean());
-          relatedServiceId_ = null;
+          endpointId_ = null;
         }
-        return relatedServiceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> path_ =
-        java.util.Collections.emptyList();
-      private void ensurePathIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          path_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(path_);
-          bitField0_ |= 0x00000001;
-         }
+        return endpointIdBuilder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathBuilder_;
-
+      private java.lang.Object endpointType_ = "";
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @return The endpointType.
        */
-      public java.util.List<context.ContextOuterClass.EndPointId> getPathList() {
-        if (pathBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(path_);
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
         } else {
-          return pathBuilder_.getMessageList();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @return The bytes for endpointType.
        */
-      public int getPathCount() {
-        if (pathBuilder_ == null) {
-          return path_.size();
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
         } else {
-          return pathBuilder_.getCount();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.EndPointId getPath(int index) {
-        if (pathBuilder_ == null) {
-          return path_.get(index);
-        } else {
-          return pathBuilder_.getMessage(index);
-        }
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder setPath(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathIsMutable();
-          path_.set(index, value);
-          onChanged();
-        } else {
-          pathBuilder_.setMessage(index, value);
-        }
+      public Builder clearEndpointType() {
+        
+        endpointType_ = getDefaultInstance().getEndpointType();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
        */
-      public Builder setPath(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathBuilder_ == null) {
-          ensurePathIsMutable();
-          path_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          pathBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.EndPointId path = 3;</code>
-       */
-      public Builder addPath(context.ContextOuterClass.EndPointId value) {
-        if (pathBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathIsMutable();
-          path_.add(value);
-          onChanged();
-        } else {
-          pathBuilder_.addMessage(value);
+
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiSampleTypesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
+          bitField0_ |= 0x00000001;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the kpiSampleTypes.
        */
-      public Builder addPath(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathIsMutable();
-          path_.add(index, value);
-          onChanged();
-        } else {
-          pathBuilder_.addMessage(index, value);
-        }
-        return this;
+      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return The count of kpiSampleTypes.
        */
-      public Builder addPath(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathBuilder_ == null) {
-          ensurePathIsMutable();
-          path_.add(builderForValue.build());
-          onChanged();
-        } else {
-          pathBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the element to return.
+       * @return The kpiSampleTypes at the given index.
        */
-      public Builder addPath(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathBuilder_ == null) {
-          ensurePathIsMutable();
-          path_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          pathBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index to set the value at.
+       * @param value The kpiSampleTypes to set.
+       * @return This builder for chaining.
        */
-      public Builder addAllPath(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (pathBuilder_ == null) {
-          ensurePathIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, path_);
-          onChanged();
-        } else {
-          pathBuilder_.addAllMessages(values);
+      public Builder setKpiSampleTypes(
+          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder clearPath() {
-        if (pathBuilder_ == null) {
-          path_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          pathBuilder_.clear();
+      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder removePath(int index) {
-        if (pathBuilder_ == null) {
-          ensurePathIsMutable();
-          path_.remove(index);
-          onChanged();
-        } else {
-          pathBuilder_.remove(index);
+      public Builder addAllKpiSampleTypes(
+          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
+          kpiSampleTypes_.add(value.getNumber());
         }
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.EndPointId.Builder getPathBuilder(
-          int index) {
-        return getPathFieldBuilder().getBuilder(index);
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
-          int index) {
-        if (pathBuilder_ == null) {
-          return path_.get(index);  } else {
-          return pathBuilder_.getMessageOrBuilder(index);
-        }
+      public java.util.List<java.lang.Integer>
+      getKpiSampleTypesValueList() {
+        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathOrBuilderList() {
-        if (pathBuilder_ != null) {
-          return pathBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(path_);
-        }
+      public int getKpiSampleTypesValue(int index) {
+        return kpiSampleTypes_.get(index);
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathBuilder() {
-        return getPathFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public Builder setKpiSampleTypesValue(
+          int index, int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value);
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathBuilder(
-          int index) {
-        return getPathFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path = 3;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getPathBuilderList() {
-        return getPathFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getPathFieldBuilder() {
-        if (pathBuilder_ == null) {
-          pathBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  path_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          path_ = null;
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(value);
         }
-        return pathBuilder_;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -32798,95 +34328,108 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Connection>
-        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    java.util.List<context.ContextOuterClass.ConnectionId> 
-        getConnectionIdsList();
+    int getActionValue();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
      */
-    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string resource_key = 2;</code>
+     * @return The resourceKey.
      */
-    int getConnectionIdsCount();
+    java.lang.String getResourceKey();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string resource_key = 2;</code>
+     * @return The bytes for resourceKey.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    com.google.protobuf.ByteString
+        getResourceKeyBytes();
+
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string resource_value = 3;</code>
+     * @return The resourceValue.
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index);
+    java.lang.String getResourceValue();
+    /**
+     * <code>string resource_value = 3;</code>
+     * @return The bytes for resourceValue.
+     */
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * Protobuf type {@code context.ConfigRule}
    */
-  public static final class ConnectionIdList extends
+  public static final class ConfigRule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private ConfigRule() {
+      action_ = 0;
+      resourceKey_ = "";
+      resourceValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new ConfigRule();
     }
 
     @java.lang.Override
@@ -32894,7 +34437,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private ConfigRule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -32902,7 +34445,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -32913,13 +34455,22 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              connectionIds_.add(
-                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+            case 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceValue_ = s;
               break;
             }
             default: {
@@ -32937,64 +34488,116 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
     }
 
-    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-      return connectionIds_;
+    @java.lang.Override public int getActionValue() {
+      return action_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceKey_;
+    /**
+     * <code>string resource_key = 2;</code>
+     * @return The resourceKey.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList() {
-      return connectionIds_;
+    public java.lang.String getResourceKey() {
+      java.lang.Object ref = resourceKey_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceKey_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string resource_key = 2;</code>
+     * @return The bytes for resourceKey.
      */
     @java.lang.Override
-    public int getConnectionIdsCount() {
-      return connectionIds_.size();
+    public com.google.protobuf.ByteString
+        getResourceKeyBytes() {
+      java.lang.Object ref = resourceKey_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceKey_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int RESOURCE_VALUE_FIELD_NUMBER = 3;
+    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string resource_value = 3;</code>
+     * @return The resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public java.lang.String getResourceValue() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceValue_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string resource_value = 3;</code>
+     * @return The bytes for resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index) {
-      return connectionIds_.get(index);
+    public com.google.protobuf.ByteString
+        getResourceValueBytes() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33011,8 +34614,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
+      }
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, resourceValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -33023,9 +34632,15 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeEnumSize(1, action_);
+      }
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, resourceValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33037,13 +34652,16 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
 
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      if (action_ != other.action_) return false;
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33055,78 +34673,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionIdsCount() > 0) {
-        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionIdsList().hashCode();
-      }
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceKey().hashCode();
+      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33139,7 +34759,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33155,26 +34775,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * Protobuf type {@code context.ConfigRule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33187,35 +34807,34 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          connectionIdsBuilder_.clear();
-        }
+        action_ = 0;
+
+        resourceKey_ = "";
+
+        resourceValue_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -33223,18 +34842,11 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList buildPartial() {
-        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connectionIds_ = connectionIds_;
-        } else {
-          result.connectionIds_ = connectionIdsBuilder_.build();
-        }
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
         onBuilt();
         return result;
       }
@@ -33273,41 +34885,26 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
-        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
-        if (connectionIdsBuilder_ == null) {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIds_.isEmpty()) {
-              connectionIds_ = other.connectionIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionIdsIsMutable();
-              connectionIds_.addAll(other.connectionIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIdsBuilder_.isEmpty()) {
-              connectionIdsBuilder_.dispose();
-              connectionIdsBuilder_ = null;
-              connectionIds_ = other.connectionIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionIdsFieldBuilder() : null;
-            } else {
-              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
+        }
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
+          onChanged();
+        }
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -33324,11 +34921,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -33337,246 +34934,211 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
+      private int action_ = 0;
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
-        } else {
-          return connectionIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
-        } else {
-          return connectionIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
-        } else {
-          return connectionIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.setMessage(index, value);
-        }
-        return this;
+      @java.lang.Override public int getActionValue() {
+        return action_;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The enum numeric value on the wire for action to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder setActionValue(int value) {
+        
+        action_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The action.
        */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(value);
-        }
-        return this;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(index, value);
+      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        action_ = value.getNumber();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
-        }
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object resourceKey_ = "";
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_key = 2;</code>
+       * @return The resourceKey.
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
-          onChanged();
+      public java.lang.String getResourceKey() {
+        java.lang.Object ref = resourceKey_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceKey_ = s;
+          return s;
         } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_key = 2;</code>
+       * @return The bytes for resourceKey.
        */
-      public Builder addAllConnectionIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connectionIds_);
-          onChanged();
+      public com.google.protobuf.ByteString
+          getResourceKeyBytes() {
+        java.lang.Object ref = resourceKey_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceKey_ = b;
+          return b;
         } else {
-          connectionIdsBuilder_.addAllMessages(values);
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_key = 2;</code>
+       * @param value The resourceKey to set.
+       * @return This builder for chaining.
        */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.clear();
-        }
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_key = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.remove(index);
-        }
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_key = 2;</code>
+       * @param value The bytes for resourceKey to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
+        onChanged();
+        return this;
       }
+
+      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_value = 3;</code>
+       * @return The resourceValue.
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-          int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
+      public java.lang.String getResourceValue() {
+        java.lang.Object ref = resourceValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_value = 3;</code>
+       * @return The bytes for resourceValue.
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
+      public com.google.protobuf.ByteString
+          getResourceValueBytes() {
+        java.lang.Object ref = resourceValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceValue_ = b;
+          return b;
         } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_value = 3;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_value = 3;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string resource_value = 3;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
-           getConnectionIdsBuilderList() {
-        return getConnectionIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdsFieldBuilder() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  connectionIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          connectionIds_ = null;
-        }
-        return connectionIdsBuilder_;
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -33591,95 +35153,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public ConfigRule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new ConfigRule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface ConstraintOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
-    /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    java.lang.String getConstraintType();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
-    int getConnectionsCount();
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    java.lang.String getConstraintValue();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
   }
   /**
-   * Protobuf type {@code context.ConnectionList}
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint}
    */
-  public static final class ConnectionList extends
+  public static final class Constraint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint)
+      ConstraintOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint.newBuilder() to construct.
+    private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private Constraint() {
+      constraintType_ = "";
+      constraintValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new Constraint();
     }
 
     @java.lang.Override
@@ -33687,7 +35254,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private Constraint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33695,7 +35262,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -33707,12 +35273,15 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintType_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintValue_ = s;
               break;
             }
             default: {
@@ -33730,64 +35299,97 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connections_ = java.util.Collections.unmodifiableList(connections_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+              context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
-    /**
-     * <code>repeated .context.Connection connections = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
-    }
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
     @java.lang.Override
-    public int getConnectionsCount() {
-      return connections_.size();
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    public com.google.protobuf.ByteString
+        getConstraintValueBytes() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33804,8 +35406,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connections_.size(); i++) {
-        output.writeMessage(1, connections_.get(i));
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -33816,9 +35421,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33830,13 +35437,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+      context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
 
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33848,78 +35457,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionsCount() > 0) {
-        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionsList().hashCode();
-      }
+      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintType().hashCode();
+      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33932,7 +35541,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33948,26 +35557,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * <pre>
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Constraint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
-        context.ContextOuterClass.ConnectionListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint)
+        context.ContextOuterClass.ConstraintOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33979,36 +35592,33 @@ public final class ContextOuterClass {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getConnectionsFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          connectionsBuilder_.clear();
+                .alwaysUseFieldBuilders) {
         }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        constraintType_ = "";
+
+        constraintValue_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.Constraint build() {
+        context.ContextOuterClass.Constraint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34016,18 +35626,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList buildPartial() {
-        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connections_ = java.util.Collections.unmodifiableList(connections_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connections_ = connections_;
-        } else {
-          result.connections_ = connectionsBuilder_.build();
-        }
+      public context.ContextOuterClass.Constraint buildPartial() {
+        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
         onBuilt();
         return result;
       }
@@ -34066,41 +35668,23 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        if (other instanceof context.ContextOuterClass.Constraint) {
+          return mergeFrom((context.ContextOuterClass.Constraint)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
-        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
-        if (connectionsBuilder_ == null) {
-          if (!other.connections_.isEmpty()) {
-            if (connections_.isEmpty()) {
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionsIsMutable();
-              connections_.addAll(other.connections_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connections_.isEmpty()) {
-            if (connectionsBuilder_.isEmpty()) {
-              connectionsBuilder_.dispose();
-              connectionsBuilder_ = null;
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionsFieldBuilder() : null;
-            } else {
-              connectionsBuilder_.addAllMessages(other.connections_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
+        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
+          onChanged();
+        }
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -34117,11 +35701,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        context.ContextOuterClass.Constraint parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34130,246 +35714,157 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Connection> connections_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
+      private java.lang.Object constraintType_ = "";
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
-        } else {
-          return connectionsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
-        } else {
-          return connectionsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
-          onChanged();
-        } else {
-          connectionsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
-          onChanged();
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
         } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
-          onChanged();
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
         } else {
-          connectionsBuilder_.addAllMessages(values);
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          connectionsBuilder_.clear();
-        }
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
-          onChanged();
-        } else {
-          connectionsBuilder_.remove(index);
-        }
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().getBuilder(index);
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
+        return this;
       }
+
+      private java.lang.Object constraintValue_ = "";
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.Connection.Builder> 
-           getConnectionsBuilderList() {
-        return getConnectionsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
-          getConnectionsFieldBuilder() {
-        if (connectionsBuilder_ == null) {
-          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
-                  connections_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          connections_ = null;
-        }
-        return connectionsBuilder_;
+      public Builder setConstraintValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34384,41 +35879,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.Constraint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint)
+    private static final context.ContextOuterClass.Constraint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+    private static final com.google.protobuf.Parser<Constraint>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public Constraint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new Constraint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<Constraint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<Constraint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -36121,45 +37616,50 @@ public final class ContextOuterClass {
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_ServiceEvent_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_EndPointId_descriptor;
+    internal_static_context_ConnectionId_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_EndPointId_fieldAccessorTable;
+      internal_static_context_ConnectionId_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_EndPoint_descriptor;
+    internal_static_context_Connection_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_EndPoint_fieldAccessorTable;
+      internal_static_context_Connection_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_ConfigRule_descriptor;
+    internal_static_context_ConnectionIdList_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_ConfigRule_fieldAccessorTable;
+      internal_static_context_ConnectionIdList_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_Constraint_descriptor;
+    internal_static_context_ConnectionList_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_Constraint_fieldAccessorTable;
+      internal_static_context_ConnectionList_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_ConnectionId_descriptor;
+    internal_static_context_ConnectionEvent_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_ConnectionId_fieldAccessorTable;
+      internal_static_context_ConnectionEvent_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_Connection_descriptor;
+    internal_static_context_EndPointId_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_Connection_fieldAccessorTable;
+      internal_static_context_EndPointId_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_ConnectionIdList_descriptor;
+    internal_static_context_EndPoint_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_ConnectionIdList_fieldAccessorTable;
+      internal_static_context_EndPoint_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_context_ConnectionList_descriptor;
+    internal_static_context_ConfigRule_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_context_ConnectionList_fieldAccessorTable;
+      internal_static_context_ConfigRule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_TeraFlowController_descriptor;
   private static final 
@@ -36179,160 +37679,177 @@ public final class ContextOuterClass {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\rcontext.proto\022\007context\"\007\n\005Empty\"\024\n\004Uui" +
-      "d\022\014\n\004uuid\030\001 \001(\t\"F\n\005Event\022\021\n\ttimestamp\030\001 " +
-      "\001(\001\022*\n\nevent_type\030\002 \001(\0162\026.context.EventT" +
-      "ypeEnum\"0\n\tContextId\022#\n\014context_uuid\030\001 \001" +
-      "(\0132\r.context.Uuid\"\266\001\n\007Context\022&\n\ncontext" +
-      "_id\030\001 \001(\0132\022.context.ContextId\022)\n\014topolog" +
-      "y_ids\030\002 \003(\0132\023.context.TopologyId\022\'\n\013serv" +
-      "ice_ids\030\003 \003(\0132\022.context.ServiceId\022/\n\ncon" +
-      "troller\030\004 \001(\0132\033.context.TeraFlowControll" +
-      "er\"8\n\rContextIdList\022\'\n\013context_ids\030\001 \003(\013" +
-      "2\022.context.ContextId\"1\n\013ContextList\022\"\n\010c" +
-      "ontexts\030\001 \003(\0132\020.context.Context\"U\n\014Conte" +
-      "xtEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&" +
-      "\n\ncontext_id\030\002 \001(\0132\022.context.ContextId\"Z" +
-      "\n\nTopologyId\022&\n\ncontext_id\030\001 \001(\0132\022.conte" +
-      "xt.ContextId\022$\n\rtopology_uuid\030\002 \001(\0132\r.co" +
-      "ntext.Uuid\"~\n\010Topology\022(\n\013topology_id\030\001 " +
-      "\001(\0132\023.context.TopologyId\022%\n\ndevice_ids\030\002" +
-      " \003(\0132\021.context.DeviceId\022!\n\010link_ids\030\003 \003(" +
-      "\0132\017.context.LinkId\";\n\016TopologyIdList\022)\n\014" +
-      "topology_ids\030\001 \003(\0132\023.context.TopologyId\"" +
-      "5\n\014TopologyList\022%\n\ntopologies\030\001 \003(\0132\021.co" +
-      "ntext.Topology\"X\n\rTopologyEvent\022\035\n\005event" +
-      "\030\001 \001(\0132\016.context.Event\022(\n\013topology_id\030\002 " +
-      "\001(\0132\023.context.TopologyId\".\n\010DeviceId\022\"\n\013" +
-      "device_uuid\030\001 \001(\0132\r.context.Uuid\"\232\002\n\006Dev" +
-      "ice\022$\n\tdevice_id\030\001 \001(\0132\021.context.DeviceI" +
-      "d\022\023\n\013device_type\030\002 \001(\t\022,\n\rdevice_config\030" +
-      "\003 \001(\0132\025.context.DeviceConfig\022G\n\031device_o" +
-      "perational_status\030\004 \001(\0162$.context.Device" +
-      "OperationalStatusEnum\0221\n\016device_drivers\030" +
-      "\005 \003(\0162\031.context.DeviceDriverEnum\022+\n\020devi" +
-      "ce_endpoints\030\006 \003(\0132\021.context.EndPoint\"9\n" +
-      "\014DeviceConfig\022)\n\014config_rules\030\001 \003(\0132\023.co" +
-      "ntext.ConfigRule\"5\n\014DeviceIdList\022%\n\ndevi" +
-      "ce_ids\030\001 \003(\0132\021.context.DeviceId\".\n\nDevic" +
-      "eList\022 \n\007devices\030\001 \003(\0132\017.context.Device\"" +
-      "R\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
-      "Event\022$\n\tdevice_id\030\002 \001(\0132\021.context.Devic" +
-      "eId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132\r.conte" +
-      "xt.Uuid\"X\n\004Link\022 \n\007link_id\030\001 \001(\0132\017.conte" +
-      "xt.LinkId\022.\n\021link_endpoint_ids\030\002 \003(\0132\023.c" +
-      "ontext.EndPointId\"/\n\nLinkIdList\022!\n\010link_" +
-      "ids\030\001 \003(\0132\017.context.LinkId\"(\n\010LinkList\022\034" +
-      "\n\005links\030\001 \003(\0132\r.context.Link\"L\n\tLinkEven" +
-      "t\022\035\n\005event\030\001 \001(\0132\016.context.Event\022 \n\007link" +
-      "_id\030\002 \001(\0132\017.context.LinkId\"X\n\tServiceId\022" +
-      "&\n\ncontext_id\030\001 \001(\0132\022.context.ContextId\022" +
-      "#\n\014service_uuid\030\002 \001(\0132\r.context.Uuid\"\246\002\n" +
-      "\007Service\022&\n\nservice_id\030\001 \001(\0132\022.context.S" +
-      "erviceId\022.\n\014service_type\030\002 \001(\0162\030.context" +
-      ".ServiceTypeEnum\0221\n\024service_endpoint_ids" +
-      "\030\003 \003(\0132\023.context.EndPointId\0220\n\023service_c" +
-      "onstraints\030\004 \003(\0132\023.context.Constraint\022.\n" +
-      "\016service_status\030\005 \001(\0132\026.context.ServiceS" +
-      "tatus\022.\n\016service_config\030\006 \001(\0132\026.context." +
-      "ServiceConfig\"C\n\rServiceStatus\0222\n\016servic" +
-      "e_status\030\001 \001(\0162\032.context.ServiceStatusEn" +
-      "um\":\n\rServiceConfig\022)\n\014config_rules\030\001 \003(" +
-      "\0132\023.context.ConfigRule\"8\n\rServiceIdList\022" +
-      "\'\n\013service_ids\030\001 \003(\0132\022.context.ServiceId" +
-      "\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132\020.cont" +
-      "ext.Service\"U\n\014ServiceEvent\022\035\n\005event\030\001 \001" +
-      "(\0132\016.context.Event\022&\n\nservice_id\030\002 \001(\0132\022" +
-      ".context.ServiceId\"\202\001\n\nEndPointId\022(\n\013top" +
-      "ology_id\030\001 \001(\0132\023.context.TopologyId\022$\n\td" +
-      "evice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\rend" +
-      "point_uuid\030\003 \001(\0132\r.context.Uuid\"K\n\010EndPo" +
-      "int\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPo" +
-      "intId\022\025\n\rendpoint_type\030\002 \001(\t\"e\n\nConfigRu" +
-      "le\022)\n\006action\030\001 \001(\0162\031.context.ConfigActio" +
-      "nEnum\022\024\n\014resource_key\030\002 \001(\t\022\026\n\016resource_" +
-      "value\030\003 \001(\t\"?\n\nConstraint\022\027\n\017constraint_" +
-      "type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t\"6\n\014" +
-      "ConnectionId\022&\n\017connection_uuid\030\001 \001(\0132\r." +
-      "context.Uuid\"\215\001\n\nConnection\022,\n\rconnectio" +
-      "n_id\030\001 \001(\0132\025.context.ConnectionId\022.\n\022rel" +
-      "ated_service_id\030\002 \001(\0132\022.context.ServiceI" +
-      "d\022!\n\004path\030\003 \003(\0132\023.context.EndPointId\"A\n\020" +
-      "ConnectionIdList\022-\n\016connection_ids\030\001 \003(\013" +
-      "2\025.context.ConnectionId\":\n\016ConnectionLis" +
-      "t\022(\n\013connections\030\001 \003(\0132\023.context.Connect" +
-      "ion\"^\n\022TeraFlowController\022&\n\ncontext_id\030" +
-      "\001 \001(\0132\022.context.ContextId\022\022\n\nip_address\030" +
-      "\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationRes" +
-      "ult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" +
-      "tId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEventTypeE" +
-      "num\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTTYP" +
-      "E_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EVEN" +
-      "TTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum\022\032\n\026D" +
-      "EVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVER_" +
-      "OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT_A" +
-      "PI\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRIVE" +
-      "R_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRIVE" +
-      "R_ONF_TR_352\020\005*\217\001\n\033DeviceOperationalStat" +
-      "usEnum\022%\n!DEVICEOPERATIONALSTATUS_UNDEFI" +
-      "NED\020\000\022$\n DEVICEOPERATIONALSTATUS_DISABLE" +
-      "D\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENABLED\020\002" +
-      "*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE_UNKN" +
-      "OWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETY" +
-      "PE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVI" +
-      "TY_SERVICE\020\003*\210\001\n\021ServiceStatusEnum\022\033\n\027SE" +
-      "RVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICESTATUS" +
-      "_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!\n\035" +
-      "SERVICESTATUS_PENDING_REMOVAL\020\003*]\n\020Confi" +
-      "gActionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022" +
-      "\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_DE" +
-      "LETE\020\0022\245\r\n\016ContextService\022:\n\016ListContext" +
-      "Ids\022\016.context.Empty\032\026.context.ContextIdL" +
-      "ist\"\000\0226\n\014ListContexts\022\016.context.Empty\032\024." +
-      "context.ContextList\"\000\0224\n\nGetContext\022\022.co" +
-      "ntext.ContextId\032\020.context.Context\"\000\0224\n\nS" +
-      "etContext\022\020.context.Context\032\022.context.Co" +
-      "ntextId\"\000\0225\n\rRemoveContext\022\022.context.Con" +
-      "textId\032\016.context.Empty\"\000\022=\n\020GetContextEv" +
-      "ents\022\016.context.Empty\032\025.context.ContextEv" +
-      "ent\"\0000\001\022@\n\017ListTopologyIds\022\022.context.Con" +
-      "textId\032\027.context.TopologyIdList\"\000\022=\n\016Lis" +
-      "tTopologies\022\022.context.ContextId\032\025.contex" +
-      "t.TopologyList\"\000\0227\n\013GetTopology\022\023.contex" +
-      "t.TopologyId\032\021.context.Topology\"\000\0227\n\013Set" +
-      "Topology\022\021.context.Topology\032\023.context.To" +
-      "pologyId\"\000\0227\n\016RemoveTopology\022\023.context.T" +
-      "opologyId\032\016.context.Empty\"\000\022?\n\021GetTopolo" +
-      "gyEvents\022\016.context.Empty\032\026.context.Topol" +
-      "ogyEvent\"\0000\001\0228\n\rListDeviceIds\022\016.context." +
-      "Empty\032\025.context.DeviceIdList\"\000\0224\n\013ListDe" +
-      "vices\022\016.context.Empty\032\023.context.DeviceLi" +
-      "st\"\000\0221\n\tGetDevice\022\021.context.DeviceId\032\017.c" +
-      "ontext.Device\"\000\0221\n\tSetDevice\022\017.context.D" +
-      "evice\032\021.context.DeviceId\"\000\0223\n\014RemoveDevi" +
-      "ce\022\021.context.DeviceId\032\016.context.Empty\"\000\022" +
-      ";\n\017GetDeviceEvents\022\016.context.Empty\032\024.con" +
-      "text.DeviceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.co" +
-      "ntext.Empty\032\023.context.LinkIdList\"\000\0220\n\tLi" +
-      "stLinks\022\016.context.Empty\032\021.context.LinkLi" +
-      "st\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r.conte" +
-      "xt.Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.co" +
-      "ntext.LinkId\"\000\022/\n\nRemoveLink\022\017.context.L" +
-      "inkId\032\016.context.Empty\"\000\0227\n\rGetLinkEvents" +
-      "\022\016.context.Empty\032\022.context.LinkEvent\"\0000\001" +
-      "\022>\n\016ListServiceIds\022\022.context.ContextId\032\026" +
-      ".context.ServiceIdList\"\000\022:\n\014ListServices" +
-      "\022\022.context.ContextId\032\024.context.ServiceLi" +
-      "st\"\000\0224\n\nGetService\022\022.context.ServiceId\032\020" +
-      ".context.Service\"\000\0224\n\nSetService\022\020.conte" +
-      "xt.Service\032\022.context.ServiceId\"\000\0225\n\rRemo" +
-      "veService\022\022.context.ServiceId\032\016.context." +
-      "Empty\"\000\022=\n\020GetServiceEvents\022\016.context.Em" +
-      "pty\032\025.context.ServiceEvent\"\0000\001b\006proto3"
+      "\n\rcontext.proto\022\007context\032\026kpi_sample_typ" +
+      "es.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004uuid\030\001 \001(\t\"" +
+      "F\n\005Event\022\021\n\ttimestamp\030\001 \001(\001\022*\n\nevent_typ" +
+      "e\030\002 \001(\0162\026.context.EventTypeEnum\"0\n\tConte" +
+      "xtId\022#\n\014context_uuid\030\001 \001(\0132\r.context.Uui" +
+      "d\"\266\001\n\007Context\022&\n\ncontext_id\030\001 \001(\0132\022.cont" +
+      "ext.ContextId\022)\n\014topology_ids\030\002 \003(\0132\023.co" +
+      "ntext.TopologyId\022\'\n\013service_ids\030\003 \003(\0132\022." +
+      "context.ServiceId\022/\n\ncontroller\030\004 \001(\0132\033." +
+      "context.TeraFlowController\"8\n\rContextIdL" +
+      "ist\022\'\n\013context_ids\030\001 \003(\0132\022.context.Conte" +
+      "xtId\"1\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020." +
+      "context.Context\"U\n\014ContextEvent\022\035\n\005event" +
+      "\030\001 \001(\0132\016.context.Event\022&\n\ncontext_id\030\002 \001" +
+      "(\0132\022.context.ContextId\"Z\n\nTopologyId\022&\n\n" +
+      "context_id\030\001 \001(\0132\022.context.ContextId\022$\n\r" +
+      "topology_uuid\030\002 \001(\0132\r.context.Uuid\"~\n\010To" +
+      "pology\022(\n\013topology_id\030\001 \001(\0132\023.context.To" +
+      "pologyId\022%\n\ndevice_ids\030\002 \003(\0132\021.context.D" +
+      "eviceId\022!\n\010link_ids\030\003 \003(\0132\017.context.Link" +
+      "Id\";\n\016TopologyIdList\022)\n\014topology_ids\030\001 \003" +
+      "(\0132\023.context.TopologyId\"5\n\014TopologyList\022" +
+      "%\n\ntopologies\030\001 \003(\0132\021.context.Topology\"X" +
+      "\n\rTopologyEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
+      ".Event\022(\n\013topology_id\030\002 \001(\0132\023.context.To" +
+      "pologyId\".\n\010DeviceId\022\"\n\013device_uuid\030\001 \001(" +
+      "\0132\r.context.Uuid\"\232\002\n\006Device\022$\n\tdevice_id" +
+      "\030\001 \001(\0132\021.context.DeviceId\022\023\n\013device_type" +
+      "\030\002 \001(\t\022,\n\rdevice_config\030\003 \001(\0132\025.context." +
+      "DeviceConfig\022G\n\031device_operational_statu" +
+      "s\030\004 \001(\0162$.context.DeviceOperationalStatu" +
+      "sEnum\0221\n\016device_drivers\030\005 \003(\0162\031.context." +
+      "DeviceDriverEnum\022+\n\020device_endpoints\030\006 \003" +
+      "(\0132\021.context.EndPoint\"9\n\014DeviceConfig\022)\n" +
+      "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" +
+      "\"5\n\014DeviceIdList\022%\n\ndevice_ids\030\001 \003(\0132\021.c" +
+      "ontext.DeviceId\".\n\nDeviceList\022 \n\007devices" +
+      "\030\001 \003(\0132\017.context.Device\"R\n\013DeviceEvent\022\035" +
+      "\n\005event\030\001 \001(\0132\016.context.Event\022$\n\tdevice_" +
+      "id\030\002 \001(\0132\021.context.DeviceId\"*\n\006LinkId\022 \n" +
+      "\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"X\n\004Link\022" +
+      " \n\007link_id\030\001 \001(\0132\017.context.LinkId\022.\n\021lin" +
+      "k_endpoint_ids\030\002 \003(\0132\023.context.EndPointI" +
+      "d\"/\n\nLinkIdList\022!\n\010link_ids\030\001 \003(\0132\017.cont" +
+      "ext.LinkId\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r." +
+      "context.Link\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\013" +
+      "2\016.context.Event\022 \n\007link_id\030\002 \001(\0132\017.cont" +
+      "ext.LinkId\"X\n\tServiceId\022&\n\ncontext_id\030\001 " +
+      "\001(\0132\022.context.ContextId\022#\n\014service_uuid\030" +
+      "\002 \001(\0132\r.context.Uuid\"\246\002\n\007Service\022&\n\nserv" +
+      "ice_id\030\001 \001(\0132\022.context.ServiceId\022.\n\014serv" +
+      "ice_type\030\002 \001(\0162\030.context.ServiceTypeEnum" +
+      "\0221\n\024service_endpoint_ids\030\003 \003(\0132\023.context" +
+      ".EndPointId\0220\n\023service_constraints\030\004 \003(\013" +
+      "2\023.context.Constraint\022.\n\016service_status\030" +
+      "\005 \001(\0132\026.context.ServiceStatus\022.\n\016service" +
+      "_config\030\006 \001(\0132\026.context.ServiceConfig\"C\n" +
+      "\rServiceStatus\0222\n\016service_status\030\001 \001(\0162\032" +
+      ".context.ServiceStatusEnum\":\n\rServiceCon" +
+      "fig\022)\n\014config_rules\030\001 \003(\0132\023.context.Conf" +
+      "igRule\"8\n\rServiceIdList\022\'\n\013service_ids\030\001" +
+      " \003(\0132\022.context.ServiceId\"1\n\013ServiceList\022" +
+      "\"\n\010services\030\001 \003(\0132\020.context.Service\"U\n\014S" +
+      "erviceEvent\022\035\n\005event\030\001 \001(\0132\016.context.Eve" +
+      "nt\022&\n\nservice_id\030\002 \001(\0132\022.context.Service" +
+      "Id\"6\n\014ConnectionId\022&\n\017connection_uuid\030\001 " +
+      "\001(\0132\r.context.Uuid\"\304\001\n\nConnection\022,\n\rcon" +
+      "nection_id\030\001 \001(\0132\025.context.ConnectionId\022" +
+      "&\n\nservice_id\030\002 \001(\0132\022.context.ServiceId\022" +
+      "3\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.contex" +
+      "t.EndPointId\022+\n\017sub_service_ids\030\004 \003(\0132\022." +
+      "context.ServiceId\"A\n\020ConnectionIdList\022-\n" +
+      "\016connection_ids\030\001 \003(\0132\025.context.Connecti" +
+      "onId\":\n\016ConnectionList\022(\n\013connections\030\001 " +
+      "\003(\0132\023.context.Connection\"^\n\017ConnectionEv" +
+      "ent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022,\n\rco" +
+      "nnection_id\030\002 \001(\0132\025.context.ConnectionId" +
+      "\"\202\001\n\nEndPointId\022(\n\013topology_id\030\001 \001(\0132\023.c" +
+      "ontext.TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.c" +
+      "ontext.DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r" +
+      ".context.Uuid\"\206\001\n\010EndPoint\022(\n\013endpoint_i" +
+      "d\030\001 \001(\0132\023.context.EndPointId\022\025\n\rendpoint" +
+      "_type\030\002 \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037." +
+      "kpi_sample_types.KpiSampleType\"e\n\nConfig" +
+      "Rule\022)\n\006action\030\001 \001(\0162\031.context.ConfigAct" +
+      "ionEnum\022\024\n\014resource_key\030\002 \001(\t\022\026\n\016resourc" +
+      "e_value\030\003 \001(\t\"?\n\nConstraint\022\027\n\017constrain" +
+      "t_type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t\"^" +
+      "\n\022TeraFlowController\022&\n\ncontext_id\030\001 \001(\013" +
+      "2\022.context.ContextId\022\022\n\nip_address\030\002 \001(\t" +
+      "\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationResult\022&" +
+      "\n\ncontext_id\030\001 \001(\0132\022.context.ContextId\022\025" +
+      "\n\rauthenticated\030\002 \001(\010*j\n\rEventTypeEnum\022\027" +
+      "\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTTYPE_CRE" +
+      "ATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EVENTTYPE" +
+      "_REMOVE\020\003*\305\001\n\020DeviceDriverEnum\022\032\n\026DEVICE" +
+      "DRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVER_OPENC" +
+      "ONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT_API\020\002\022" +
+      "\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRIVER_IET" +
+      "F_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRIVER_ONF" +
+      "_TR_352\020\005*\217\001\n\033DeviceOperationalStatusEnu" +
+      "m\022%\n!DEVICEOPERATIONALSTATUS_UNDEFINED\020\000" +
+      "\022$\n DEVICEOPERATIONALSTATUS_DISABLED\020\001\022#" +
+      "\n\037DEVICEOPERATIONALSTATUS_ENABLED\020\002*\201\001\n\017" +
+      "ServiceTypeEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000" +
+      "\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2" +
+      "NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVITY_SE" +
+      "RVICE\020\003*\210\001\n\021ServiceStatusEnum\022\033\n\027SERVICE" +
+      "STATUS_UNDEFINED\020\000\022\031\n\025SERVICESTATUS_PLAN" +
+      "NED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!\n\035SERVI" +
+      "CESTATUS_PENDING_REMOVAL\020\003*]\n\020ConfigActi" +
+      "onEnum\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022\024\n\020CO" +
+      "NFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_DELETE\020" +
+      "\0022\255\020\n\016ContextService\022:\n\016ListContextIds\022\016" +
+      ".context.Empty\032\026.context.ContextIdList\"\000" +
+      "\0226\n\014ListContexts\022\016.context.Empty\032\024.conte" +
+      "xt.ContextList\"\000\0224\n\nGetContext\022\022.context" +
+      ".ContextId\032\020.context.Context\"\000\0224\n\nSetCon" +
+      "text\022\020.context.Context\032\022.context.Context" +
+      "Id\"\000\0225\n\rRemoveContext\022\022.context.ContextI" +
+      "d\032\016.context.Empty\"\000\022=\n\020GetContextEvents\022" +
+      "\016.context.Empty\032\025.context.ContextEvent\"\000" +
+      "0\001\022@\n\017ListTopologyIds\022\022.context.ContextI" +
+      "d\032\027.context.TopologyIdList\"\000\022=\n\016ListTopo" +
+      "logies\022\022.context.ContextId\032\025.context.Top" +
+      "ologyList\"\000\0227\n\013GetTopology\022\023.context.Top" +
+      "ologyId\032\021.context.Topology\"\000\0227\n\013SetTopol" +
+      "ogy\022\021.context.Topology\032\023.context.Topolog" +
+      "yId\"\000\0227\n\016RemoveTopology\022\023.context.Topolo" +
+      "gyId\032\016.context.Empty\"\000\022?\n\021GetTopologyEve" +
+      "nts\022\016.context.Empty\032\026.context.TopologyEv" +
+      "ent\"\0000\001\0228\n\rListDeviceIds\022\016.context.Empty" +
+      "\032\025.context.DeviceIdList\"\000\0224\n\013ListDevices" +
+      "\022\016.context.Empty\032\023.context.DeviceList\"\000\022" +
+      "1\n\tGetDevice\022\021.context.DeviceId\032\017.contex" +
+      "t.Device\"\000\0221\n\tSetDevice\022\017.context.Device" +
+      "\032\021.context.DeviceId\"\000\0223\n\014RemoveDevice\022\021." +
+      "context.DeviceId\032\016.context.Empty\"\000\022;\n\017Ge" +
+      "tDeviceEvents\022\016.context.Empty\032\024.context." +
+      "DeviceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.context" +
+      ".Empty\032\023.context.LinkIdList\"\000\0220\n\tListLin" +
+      "ks\022\016.context.Empty\032\021.context.LinkList\"\000\022" +
+      "+\n\007GetLink\022\017.context.LinkId\032\r.context.Li" +
+      "nk\"\000\022+\n\007SetLink\022\r.context.Link\032\017.context" +
+      ".LinkId\"\000\022/\n\nRemoveLink\022\017.context.LinkId" +
+      "\032\016.context.Empty\"\000\0227\n\rGetLinkEvents\022\016.co" +
+      "ntext.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016L" +
+      "istServiceIds\022\022.context.ContextId\032\026.cont" +
+      "ext.ServiceIdList\"\000\022:\n\014ListServices\022\022.co" +
+      "ntext.ContextId\032\024.context.ServiceList\"\000\022" +
+      "4\n\nGetService\022\022.context.ServiceId\032\020.cont" +
+      "ext.Service\"\000\0224\n\nSetService\022\020.context.Se" +
+      "rvice\032\022.context.ServiceId\"\000\0225\n\rRemoveSer" +
+      "vice\022\022.context.ServiceId\032\016.context.Empty" +
+      "\"\000\022=\n\020GetServiceEvents\022\016.context.Empty\032\025" +
+      ".context.ServiceEvent\"\0000\001\022D\n\021ListConnect" +
+      "ionIds\022\022.context.ServiceId\032\031.context.Con" +
+      "nectionIdList\"\000\022@\n\017ListConnections\022\022.con" +
+      "text.ServiceId\032\027.context.ConnectionList\"" +
+      "\000\022=\n\rGetConnection\022\025.context.ConnectionI" +
+      "d\032\023.context.Connection\"\000\022=\n\rSetConnectio" +
+      "n\022\023.context.Connection\032\025.context.Connect" +
+      "ionId\"\000\022;\n\020RemoveConnection\022\025.context.Co" +
+      "nnectionId\032\016.context.Empty\"\000\022C\n\023GetConne" +
+      "ctionEvents\022\016.context.Empty\032\030.context.Co" +
+      "nnectionEvent\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
+          kpi_sample_types.KpiSampleTypes.getDescriptor(),
         });
     internal_static_context_Empty_descriptor =
       getDescriptor().getMessageTypes().get(0);
@@ -36520,66 +38037,73 @@ public final class ContextOuterClass {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceEvent_descriptor,
         new java.lang.String[] { "Event", "ServiceId", });
-    internal_static_context_EndPointId_descriptor =
-      getDescriptor().getMessageTypes().get(31);
-    internal_static_context_EndPointId_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_context_EndPointId_descriptor,
-        new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
-    internal_static_context_EndPoint_descriptor =
-      getDescriptor().getMessageTypes().get(32);
-    internal_static_context_EndPoint_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_context_EndPoint_descriptor,
-        new java.lang.String[] { "EndpointId", "EndpointType", });
-    internal_static_context_ConfigRule_descriptor =
-      getDescriptor().getMessageTypes().get(33);
-    internal_static_context_ConfigRule_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_context_ConfigRule_descriptor,
-        new java.lang.String[] { "Action", "ResourceKey", "ResourceValue", });
-    internal_static_context_Constraint_descriptor =
-      getDescriptor().getMessageTypes().get(34);
-    internal_static_context_Constraint_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
     internal_static_context_ConnectionId_descriptor =
-      getDescriptor().getMessageTypes().get(35);
+      getDescriptor().getMessageTypes().get(31);
     internal_static_context_ConnectionId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionId_descriptor,
         new java.lang.String[] { "ConnectionUuid", });
     internal_static_context_Connection_descriptor =
-      getDescriptor().getMessageTypes().get(36);
+      getDescriptor().getMessageTypes().get(32);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
-        new java.lang.String[] { "ConnectionId", "RelatedServiceId", "Path", });
+        new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(37);
+      getDescriptor().getMessageTypes().get(33);
     internal_static_context_ConnectionIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionIdList_descriptor,
         new java.lang.String[] { "ConnectionIds", });
     internal_static_context_ConnectionList_descriptor =
-      getDescriptor().getMessageTypes().get(38);
+      getDescriptor().getMessageTypes().get(34);
     internal_static_context_ConnectionList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionList_descriptor,
         new java.lang.String[] { "Connections", });
-    internal_static_context_TeraFlowController_descriptor =
+    internal_static_context_ConnectionEvent_descriptor =
+      getDescriptor().getMessageTypes().get(35);
+    internal_static_context_ConnectionEvent_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionEvent_descriptor,
+        new java.lang.String[] { "Event", "ConnectionId", });
+    internal_static_context_EndPointId_descriptor =
+      getDescriptor().getMessageTypes().get(36);
+    internal_static_context_EndPointId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPointId_descriptor,
+        new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
+    internal_static_context_EndPoint_descriptor =
+      getDescriptor().getMessageTypes().get(37);
+    internal_static_context_EndPoint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPoint_descriptor,
+        new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", });
+    internal_static_context_ConfigRule_descriptor =
+      getDescriptor().getMessageTypes().get(38);
+    internal_static_context_ConfigRule_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConfigRule_descriptor,
+        new java.lang.String[] { "Action", "ResourceKey", "ResourceValue", });
+    internal_static_context_Constraint_descriptor =
       getDescriptor().getMessageTypes().get(39);
+    internal_static_context_Constraint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_descriptor,
+        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
+    internal_static_context_TeraFlowController_descriptor =
+      getDescriptor().getMessageTypes().get(40);
     internal_static_context_TeraFlowController_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TeraFlowController_descriptor,
         new java.lang.String[] { "ContextId", "IpAddress", "Port", });
     internal_static_context_AuthenticationResult_descriptor =
-      getDescriptor().getMessageTypes().get(40);
+      getDescriptor().getMessageTypes().get(41);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
         new java.lang.String[] { "ContextId", "Authenticated", });
+    kpi_sample_types.KpiSampleTypes.getDescriptor();
   }
 
   // @@protoc_insertion_point(outer_class_scope)
diff --git a/src/policy/target/generated-sources/grpc/context/ContextService.java b/src/policy/target/generated-sources/grpc/context/ContextService.java
index 8e5095d25896abc5ff37b7a5e7d4ac7f97825dc6..cbd51163f340212839e0eeb2ad096032fdba8109 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextService.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextService.java
@@ -58,6 +58,16 @@ public interface ContextService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionList> listConnections(context.ContextOuterClass.ServiceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Connection> getConnection(context.ContextOuterClass.ConnectionId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionId> setConnection(context.ContextOuterClass.Connection request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeConnection(context.ContextOuterClass.ConnectionId request);
+    
     
     io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request);
     
@@ -69,6 +79,8 @@ public interface ContextService extends MutinyService {
     
     io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request);
     
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(context.ContextOuterClass.Empty request);
+    
     
 
 }
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
index fbecd5d2f3cdf04e9f47693a4aeea37753855cdf..6900cf3c8a09ad6e3df1aaf2cc403c32490d3289 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -215,6 +215,46 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.listConnectionIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionList> listConnections(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.listConnections(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Connection> getConnection(context.ContextOuterClass.ConnectionId request) {
+       try {
+         return delegate.getConnection(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionId> setConnection(context.ContextOuterClass.Connection request) {
+       try {
+         return delegate.setConnection(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeConnection(context.ContextOuterClass.ConnectionId request) {
+       try {
+         return delegate.removeConnection(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
 
     @Override
     public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
@@ -261,4 +301,13 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
        }
     }
 
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getConnectionEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
 }
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
index 6e815b940e668e33bf936d7d9de0930d086ff9a3..a3d74cb7dfce2b3ffd259570a6dc65699f85f0cc 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -120,6 +120,26 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
        return stub.removeService(request);
     }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
+       return stub.listConnectionIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionList> listConnections(context.ContextOuterClass.ServiceId request) {
+       return stub.listConnections(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Connection> getConnection(context.ContextOuterClass.ConnectionId request) {
+       return stub.getConnection(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionId> setConnection(context.ContextOuterClass.Connection request) {
+       return stub.setConnection(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeConnection(context.ContextOuterClass.ConnectionId request) {
+       return stub.removeConnection(request);
+    }
 
     @Override
     public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
@@ -146,4 +166,9 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
        return stub.getServiceEvents(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(context.ContextOuterClass.Empty request) {
+       return stub.getConnectionEvents(request);
+    }
+
 }
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
index 03f2a66f6f09ed54eb1c359a356ba5240b184166..be9f381ffee96febd202beb540bce862c1347378 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -944,6 +944,192 @@ public final class ContextServiceGrpc {
     return getGetServiceEventsMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.ConnectionIdList> getListConnectionIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListConnectionIds",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = context.ContextOuterClass.ConnectionIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.ConnectionIdList> getListConnectionIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList> getListConnectionIdsMethod;
+    if ((getListConnectionIdsMethod = ContextServiceGrpc.getListConnectionIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListConnectionIdsMethod = ContextServiceGrpc.getListConnectionIdsMethod) == null) {
+          ContextServiceGrpc.getListConnectionIdsMethod = getListConnectionIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListConnectionIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ConnectionIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListConnectionIds"))
+              .build();
+        }
+      }
+    }
+    return getListConnectionIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.ConnectionList> getListConnectionsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListConnections",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = context.ContextOuterClass.ConnectionList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.ConnectionList> getListConnectionsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList> getListConnectionsMethod;
+    if ((getListConnectionsMethod = ContextServiceGrpc.getListConnectionsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListConnectionsMethod = ContextServiceGrpc.getListConnectionsMethod) == null) {
+          ContextServiceGrpc.getListConnectionsMethod = getListConnectionsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListConnections"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ConnectionList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListConnections"))
+              .build();
+        }
+      }
+    }
+    return getListConnectionsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ConnectionId,
+      context.ContextOuterClass.Connection> getGetConnectionMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetConnection",
+      requestType = context.ContextOuterClass.ConnectionId.class,
+      responseType = context.ContextOuterClass.Connection.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ConnectionId,
+      context.ContextOuterClass.Connection> getGetConnectionMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection> getGetConnectionMethod;
+    if ((getGetConnectionMethod = ContextServiceGrpc.getGetConnectionMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetConnectionMethod = ContextServiceGrpc.getGetConnectionMethod) == null) {
+          ContextServiceGrpc.getGetConnectionMethod = getGetConnectionMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetConnection"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ConnectionId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Connection.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetConnection"))
+              .build();
+        }
+      }
+    }
+    return getGetConnectionMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Connection,
+      context.ContextOuterClass.ConnectionId> getSetConnectionMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetConnection",
+      requestType = context.ContextOuterClass.Connection.class,
+      responseType = context.ContextOuterClass.ConnectionId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Connection,
+      context.ContextOuterClass.ConnectionId> getSetConnectionMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId> getSetConnectionMethod;
+    if ((getSetConnectionMethod = ContextServiceGrpc.getSetConnectionMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetConnectionMethod = ContextServiceGrpc.getSetConnectionMethod) == null) {
+          ContextServiceGrpc.getSetConnectionMethod = getSetConnectionMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetConnection"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Connection.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ConnectionId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetConnection"))
+              .build();
+        }
+      }
+    }
+    return getSetConnectionMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ConnectionId,
+      context.ContextOuterClass.Empty> getRemoveConnectionMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveConnection",
+      requestType = context.ContextOuterClass.ConnectionId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ConnectionId,
+      context.ContextOuterClass.Empty> getRemoveConnectionMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty> getRemoveConnectionMethod;
+    if ((getRemoveConnectionMethod = ContextServiceGrpc.getRemoveConnectionMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveConnectionMethod = ContextServiceGrpc.getRemoveConnectionMethod) == null) {
+          ContextServiceGrpc.getRemoveConnectionMethod = getRemoveConnectionMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveConnection"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ConnectionId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveConnection"))
+              .build();
+        }
+      }
+    }
+    return getRemoveConnectionMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ConnectionEvent> getGetConnectionEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetConnectionEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ConnectionEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ConnectionEvent> getGetConnectionEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent> getGetConnectionEventsMethod;
+    if ((getGetConnectionEventsMethod = ContextServiceGrpc.getGetConnectionEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetConnectionEventsMethod = ContextServiceGrpc.getGetConnectionEventsMethod) == null) {
+          ContextServiceGrpc.getGetConnectionEventsMethod = getGetConnectionEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetConnectionEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ConnectionEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetConnectionEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetConnectionEventsMethod;
+  }
+
   /**
    * Creates a new async stub that supports all call types for the service
    */
@@ -1202,6 +1388,48 @@ public final class ContextServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceEventsMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void listConnectionIds(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListConnectionIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listConnections(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListConnectionsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getConnection(context.ContextOuterClass.ConnectionId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Connection> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetConnectionMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setConnection(context.ContextOuterClass.Connection request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetConnectionMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeConnection(context.ContextOuterClass.ConnectionId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveConnectionMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getConnectionEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetConnectionEventsMethod(), responseObserver);
+    }
+
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
       return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
           .addMethod(
@@ -1414,6 +1642,48 @@ public final class ContextServiceGrpc {
                 context.ContextOuterClass.Empty,
                 context.ContextOuterClass.ServiceEvent>(
                   this, METHODID_GET_SERVICE_EVENTS)))
+          .addMethod(
+            getListConnectionIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                context.ContextOuterClass.ConnectionIdList>(
+                  this, METHODID_LIST_CONNECTION_IDS)))
+          .addMethod(
+            getListConnectionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                context.ContextOuterClass.ConnectionList>(
+                  this, METHODID_LIST_CONNECTIONS)))
+          .addMethod(
+            getGetConnectionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ConnectionId,
+                context.ContextOuterClass.Connection>(
+                  this, METHODID_GET_CONNECTION)))
+          .addMethod(
+            getSetConnectionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Connection,
+                context.ContextOuterClass.ConnectionId>(
+                  this, METHODID_SET_CONNECTION)))
+          .addMethod(
+            getRemoveConnectionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ConnectionId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_CONNECTION)))
+          .addMethod(
+            getGetConnectionEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ConnectionEvent>(
+                  this, METHODID_GET_CONNECTION_EVENTS)))
           .build();
     }
   }
@@ -1671,6 +1941,54 @@ public final class ContextServiceGrpc {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
           getChannel().newCall(getGetServiceEventsMethod(), getCallOptions()), request, responseObserver);
     }
+
+    /**
+     */
+    public void listConnectionIds(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListConnectionIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listConnections(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListConnectionsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getConnection(context.ContextOuterClass.ConnectionId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Connection> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetConnectionMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setConnection(context.ContextOuterClass.Connection request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetConnectionMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeConnection(context.ContextOuterClass.ConnectionId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveConnectionMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getConnectionEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetConnectionEventsMethod(), getCallOptions()), request, responseObserver);
+    }
   }
 
   /**
@@ -1901,6 +2219,49 @@ public final class ContextServiceGrpc {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
           getChannel(), getGetServiceEventsMethod(), getCallOptions(), request);
     }
+
+    /**
+     */
+    public context.ContextOuterClass.ConnectionIdList listConnectionIds(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListConnectionIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ConnectionList listConnections(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListConnectionsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Connection getConnection(context.ContextOuterClass.ConnectionId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetConnectionMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ConnectionId setConnection(context.ContextOuterClass.Connection request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetConnectionMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeConnection(context.ContextOuterClass.ConnectionId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveConnectionMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetConnectionEventsMethod(), getCallOptions(), request);
+    }
   }
 
   /**
@@ -2116,6 +2477,46 @@ public final class ContextServiceGrpc {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getRemoveServiceMethod(), getCallOptions()), request);
     }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ConnectionIdList> listConnectionIds(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListConnectionIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ConnectionList> listConnections(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListConnectionsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Connection> getConnection(
+        context.ContextOuterClass.ConnectionId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetConnectionMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ConnectionId> setConnection(
+        context.ContextOuterClass.Connection request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetConnectionMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeConnection(
+        context.ContextOuterClass.ConnectionId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveConnectionMethod(), getCallOptions()), request);
+    }
   }
 
   private static final int METHODID_LIST_CONTEXT_IDS = 0;
@@ -2148,6 +2549,12 @@ public final class ContextServiceGrpc {
   private static final int METHODID_SET_SERVICE = 27;
   private static final int METHODID_REMOVE_SERVICE = 28;
   private static final int METHODID_GET_SERVICE_EVENTS = 29;
+  private static final int METHODID_LIST_CONNECTION_IDS = 30;
+  private static final int METHODID_LIST_CONNECTIONS = 31;
+  private static final int METHODID_GET_CONNECTION = 32;
+  private static final int METHODID_SET_CONNECTION = 33;
+  private static final int METHODID_REMOVE_CONNECTION = 34;
+  private static final int METHODID_GET_CONNECTION_EVENTS = 35;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -2286,6 +2693,30 @@ public final class ContextServiceGrpc {
           serviceImpl.getServiceEvents((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent>) responseObserver);
           break;
+        case METHODID_LIST_CONNECTION_IDS:
+          serviceImpl.listConnectionIds((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList>) responseObserver);
+          break;
+        case METHODID_LIST_CONNECTIONS:
+          serviceImpl.listConnections((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionList>) responseObserver);
+          break;
+        case METHODID_GET_CONNECTION:
+          serviceImpl.getConnection((context.ContextOuterClass.ConnectionId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Connection>) responseObserver);
+          break;
+        case METHODID_SET_CONNECTION:
+          serviceImpl.setConnection((context.ContextOuterClass.Connection) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionId>) responseObserver);
+          break;
+        case METHODID_REMOVE_CONNECTION:
+          serviceImpl.removeConnection((context.ContextOuterClass.ConnectionId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_CONNECTION_EVENTS:
+          serviceImpl.getConnectionEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent>) responseObserver);
+          break;
         default:
           throw new AssertionError();
       }
@@ -2377,6 +2808,12 @@ public final class ContextServiceGrpc {
               .addMethod(getSetServiceMethod())
               .addMethod(getRemoveServiceMethod())
               .addMethod(getGetServiceEventsMethod())
+              .addMethod(getListConnectionIdsMethod())
+              .addMethod(getListConnectionsMethod())
+              .addMethod(getGetConnectionMethod())
+              .addMethod(getSetConnectionMethod())
+              .addMethod(getRemoveConnectionMethod())
+              .addMethod(getGetConnectionEventsMethod())
               .build();
         }
       }
diff --git a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
index 7642fdfd5c6d203fe0e0b042ca06448477b05bad..85abba20a9f315f684f964d16db4ad0cd7e91299 100644
--- a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -161,6 +161,31 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listConnectionIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionList> listConnections(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listConnections);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Connection> getConnection(context.ContextOuterClass.ConnectionId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getConnection);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionId> setConnection(context.ContextOuterClass.Connection request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setConnection);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeConnection(context.ContextOuterClass.ConnectionId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeConnection);
+        }
+
+        
         public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getContextEvents);
         }
@@ -185,6 +210,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
             return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getServiceEvents);
         }
 
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getConnectionEvents);
+        }
+
     }
 
     
@@ -328,6 +358,31 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionList> listConnections(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Connection> getConnection(context.ContextOuterClass.ConnectionId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionId> setConnection(context.ContextOuterClass.Connection request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeConnection(context.ContextOuterClass.ConnectionId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -352,6 +407,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
         @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
             return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
                     .addMethod(
@@ -564,6 +624,48 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                                             context.ContextOuterClass.Empty,
                                             context.ContextOuterClass.ServiceEvent>(
                                             this, METHODID_GET_SERVICE_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListConnectionIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            context.ContextOuterClass.ConnectionIdList>(
+                                            this, METHODID_LIST_CONNECTION_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListConnectionsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            context.ContextOuterClass.ConnectionList>(
+                                            this, METHODID_LIST_CONNECTIONS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetConnectionMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ConnectionId,
+                                            context.ContextOuterClass.Connection>(
+                                            this, METHODID_GET_CONNECTION, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetConnectionMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Connection,
+                                            context.ContextOuterClass.ConnectionId>(
+                                            this, METHODID_SET_CONNECTION, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveConnectionMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ConnectionId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_CONNECTION, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetConnectionEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ConnectionEvent>(
+                                            this, METHODID_GET_CONNECTION_EVENTS, compression)))
                     .build();
         }
     }
@@ -598,6 +700,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
     private static final int METHODID_SET_SERVICE = 27;
     private static final int METHODID_REMOVE_SERVICE = 28;
     private static final int METHODID_GET_SERVICE_EVENTS = 29;
+    private static final int METHODID_LIST_CONNECTION_IDS = 30;
+    private static final int METHODID_LIST_CONNECTIONS = 31;
+    private static final int METHODID_GET_CONNECTION = 32;
+    private static final int METHODID_SET_CONNECTION = 33;
+    private static final int METHODID_REMOVE_CONNECTION = 34;
+    private static final int METHODID_GET_CONNECTION_EVENTS = 35;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -798,6 +906,42 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                             compression,
                             serviceImpl::getServiceEvents);
                     break;
+                case METHODID_LIST_CONNECTION_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listConnectionIds);
+                    break;
+                case METHODID_LIST_CONNECTIONS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionList>) responseObserver,
+                            compression,
+                            serviceImpl::listConnections);
+                    break;
+                case METHODID_GET_CONNECTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ConnectionId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Connection>) responseObserver,
+                            compression,
+                            serviceImpl::getConnection);
+                    break;
+                case METHODID_SET_CONNECTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Connection) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionId>) responseObserver,
+                            compression,
+                            serviceImpl::setConnection);
+                    break;
+                case METHODID_REMOVE_CONNECTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ConnectionId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeConnection);
+                    break;
+                case METHODID_GET_CONNECTION_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getConnectionEvents);
+                    break;
                 default:
                     throw new java.lang.AssertionError();
             }
diff --git a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..67e1ec736f9d83cbf95b419e9e61e92e82e73b88
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
@@ -0,0 +1,176 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: kpi_sample_types.proto
+
+package kpi_sample_types;
+
+public final class KpiSampleTypes {
+  private KpiSampleTypes() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * Protobuf enum {@code kpi_sample_types.KpiSampleType}
+   */
+  public enum KpiSampleType
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>KPISAMPLETYPE_UNKNOWN = 0;</code>
+     */
+    KPISAMPLETYPE_UNKNOWN(0),
+    /**
+     * <code>KPISAMPLETYPE_PACKETS_TRANSMITTED = 101;</code>
+     */
+    KPISAMPLETYPE_PACKETS_TRANSMITTED(101),
+    /**
+     * <code>KPISAMPLETYPE_PACKETS_RECEIVED = 102;</code>
+     */
+    KPISAMPLETYPE_PACKETS_RECEIVED(102),
+    /**
+     * <code>KPISAMPLETYPE_BYTES_TRANSMITTED = 201;</code>
+     */
+    KPISAMPLETYPE_BYTES_TRANSMITTED(201),
+    /**
+     * <code>KPISAMPLETYPE_BYTES_RECEIVED = 202;</code>
+     */
+    KPISAMPLETYPE_BYTES_RECEIVED(202),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>KPISAMPLETYPE_UNKNOWN = 0;</code>
+     */
+    public static final int KPISAMPLETYPE_UNKNOWN_VALUE = 0;
+    /**
+     * <code>KPISAMPLETYPE_PACKETS_TRANSMITTED = 101;</code>
+     */
+    public static final int KPISAMPLETYPE_PACKETS_TRANSMITTED_VALUE = 101;
+    /**
+     * <code>KPISAMPLETYPE_PACKETS_RECEIVED = 102;</code>
+     */
+    public static final int KPISAMPLETYPE_PACKETS_RECEIVED_VALUE = 102;
+    /**
+     * <code>KPISAMPLETYPE_BYTES_TRANSMITTED = 201;</code>
+     */
+    public static final int KPISAMPLETYPE_BYTES_TRANSMITTED_VALUE = 201;
+    /**
+     * <code>KPISAMPLETYPE_BYTES_RECEIVED = 202;</code>
+     */
+    public static final int KPISAMPLETYPE_BYTES_RECEIVED_VALUE = 202;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static KpiSampleType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static KpiSampleType forNumber(int value) {
+      switch (value) {
+        case 0: return KPISAMPLETYPE_UNKNOWN;
+        case 101: return KPISAMPLETYPE_PACKETS_TRANSMITTED;
+        case 102: return KPISAMPLETYPE_PACKETS_RECEIVED;
+        case 201: return KPISAMPLETYPE_BYTES_TRANSMITTED;
+        case 202: return KPISAMPLETYPE_BYTES_RECEIVED;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<KpiSampleType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        KpiSampleType> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<KpiSampleType>() {
+            public KpiSampleType findValueByNumber(int number) {
+              return KpiSampleType.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return kpi_sample_types.KpiSampleTypes.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final KpiSampleType[] VALUES = values();
+
+    public static KpiSampleType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private KpiSampleType(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:kpi_sample_types.KpiSampleType)
+  }
+
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\026kpi_sample_types.proto\022\020kpi_sample_typ" +
+      "es*\276\001\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" +
+      "KNOWN\020\000\022%\n!KPISAMPLETYPE_PACKETS_TRANSMI" +
+      "TTED\020e\022\"\n\036KPISAMPLETYPE_PACKETS_RECEIVED" +
+      "\020f\022$\n\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001" +
+      "\022!\n\034KPISAMPLETYPE_BYTES_RECEIVED\020\312\001b\006pro" +
+      "to3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index b82855281d2afc44e0a8f9e02637c09c0ab95d7c..aabaec47bd80aca4a720972095f57e8cb6723ae2 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,11 +3,10 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 46a3c5ec903563da8a3b9cf2dfefd2556ad63eaa
-    app.quarkus.io/build-timestamp: 2021-11-11 - 13:57:11 +0000
+    app.quarkus.io/commit-id: 43bda7817c976a9fb8ed7a410ad4f0ea13f62498
+    app.quarkus.io/build-timestamp: 2022-02-15 - 14:44:53 +0000
   labels:
     app.kubernetes.io/name: policyservice
-    app.kubernetes.io/version: 0.0.1
     app: policyservice
   name: policyservice
 spec:
@@ -20,34 +19,30 @@ spec:
       targetPort: 8080
   selector:
     app.kubernetes.io/name: policyservice
-    app.kubernetes.io/version: 0.0.1
-  type: NodePort
+  type: ClusterIP
 ---
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 46a3c5ec903563da8a3b9cf2dfefd2556ad63eaa
-    app.quarkus.io/build-timestamp: 2021-11-11 - 13:57:11 +0000
+    app.quarkus.io/commit-id: 43bda7817c976a9fb8ed7a410ad4f0ea13f62498
+    app.quarkus.io/build-timestamp: 2022-02-15 - 14:44:53 +0000
   labels:
     app: policyservice
-    app.kubernetes.io/version: 0.0.1
     app.kubernetes.io/name: policyservice
   name: policyservice
 spec:
   replicas: 1
   selector:
     matchLabels:
-      app.kubernetes.io/version: 0.0.1
       app.kubernetes.io/name: policyservice
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: 46a3c5ec903563da8a3b9cf2dfefd2556ad63eaa
-        app.quarkus.io/build-timestamp: 2021-11-11 - 13:57:11 +0000
+        app.quarkus.io/commit-id: 43bda7817c976a9fb8ed7a410ad4f0ea13f62498
+        app.quarkus.io/build-timestamp: 2022-02-15 - 14:44:53 +0000
       labels:
         app: policyservice
-        app.kubernetes.io/version: 0.0.1
         app.kubernetes.io/name: policyservice
     spec:
       containers:
@@ -56,7 +51,7 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-          image: registry.gitlab.com/teraflow-h2020/controller/policy:0.0.1
+          image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0
           imagePullPolicy: Always
           livenessProbe:
             failureThreshold: 3
diff --git a/src/policy/util/set_version.sh b/src/policy/util/set_version.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dcfdfe49696d518ef7cfb89f444b133dc4f0ced3
--- /dev/null
+++ b/src/policy/util/set_version.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+set -eu
+
+if (( $# != 1 )); then
+  echo "Usage: set_version.sh <version>" >&2
+  exit 1
+fi
+
+version="$1"
+
+if [ "$(git status --untracked-files=no --porcelain)" ]; then
+    printf "Uncommitted changes in tracked files.\nPlease commit first and then run the script!\n"
+    exit 0;
+fi
+
+./mvnw versions:set versions:commit -DnewVersion="${version}"
+git commit -am "release(policy): ${version}"