diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/policy/AddPolicyDeviceImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/AddPolicyDeviceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..4795273c6659c3cf7a79d8bb43cc7af0f2ed3ea3
--- /dev/null
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/AddPolicyDeviceImpl.java
@@ -0,0 +1,96 @@
+/*
+* Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.etsi.tfs.policy.policy;
+
+import static org.etsi.tfs.policy.common.ApplicationProperties.INVALID_MESSAGE;
+import static org.etsi.tfs.policy.common.ApplicationProperties.VALIDATED_POLICYRULE_STATE;
+
+import io.smallrye.mutiny.Uni;
+import io.smallrye.mutiny.groups.UniJoin;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import java.util.List;
+import org.etsi.tfs.policy.context.ContextService;
+import org.etsi.tfs.policy.exception.ExternalServiceFailureException;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeDevice;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
+
+@ApplicationScoped
+public class AddPolicyDeviceImpl {
+
+    @Inject private PolicyRuleConditionValidator policyRuleConditionValidator;
+
+    @Inject private CommonPolicyServiceImpl commonPolicyServiceImpl;
+    @Inject private CommonAlarmService commonAlarmService;
+
+    @Inject private ContextService contextService;
+
+    public Uni<List<Boolean>> returnInvalidDeviceIds(List<String> deviceIds) {
+        UniJoin.Builder<Boolean> builder = Uni.join().builder();
+        for (String deviceId : deviceIds) {
+            final var validatedDeviceId = policyRuleConditionValidator.isDeviceIdValid(deviceId);
+            builder.add(validatedDeviceId);
+        }
+        return builder.joinAll().andFailFast();
+    }
+
+    public Uni<PolicyRuleState> areDeviceOnContext(
+            List<Boolean> areDevices,
+            PolicyRuleDevice policyRuleDevice,
+            PolicyRuleBasic policyRuleBasic) {
+        if (areDevices.contains(false)) {
+            var policyRuleState =
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED,
+                            String.format(
+                                    INVALID_MESSAGE, policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId()));
+
+            return Uni.createFrom().item(policyRuleState);
+        }
+
+        final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
+        final var policyRule = new PolicyRule(policyRuleTypeDevice);
+
+        final var alarmDescriptorList = commonPolicyServiceImpl.createAlarmDescriptorList(policyRule);
+        if (alarmDescriptorList.isEmpty()) {
+            var policyRuleState =
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED,
+                            String.format(
+                                    "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
+                                    policyRuleBasic.getPolicyRuleId()));
+            return Uni.createFrom().item(policyRuleState);
+        }
+
+        return contextService
+                .setPolicyRule(policyRule)
+                .onFailure()
+                .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
+                .onItem()
+                .transform(
+                        policyId -> {
+                            commonAlarmService.startMonitoringBasedOnAlarmDescriptors(
+                                    policyId, policyRuleDevice, alarmDescriptorList);
+                            return VALIDATED_POLICYRULE_STATE;
+                        });
+    }
+}
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/policy/AddPolicyServiceImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/AddPolicyServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..5932a64128b109b7f7e908590294d0b0db3b03d8
--- /dev/null
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/AddPolicyServiceImpl.java
@@ -0,0 +1,92 @@
+/*
+* Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.etsi.tfs.policy.policy;
+
+import static org.etsi.tfs.policy.common.ApplicationProperties.INVALID_MESSAGE;
+import static org.etsi.tfs.policy.common.ApplicationProperties.VALIDATED_POLICYRULE_STATE;
+
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import java.util.List;
+import org.etsi.tfs.policy.context.ContextService;
+import org.etsi.tfs.policy.context.model.ServiceId;
+import org.etsi.tfs.policy.exception.ExternalServiceFailureException;
+import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeService;
+
+@ApplicationScoped
+public class AddPolicyServiceImpl {
+
+    @Inject private CommonPolicyServiceImpl commonPolicyService;
+    @Inject private CommonAlarmService commonAlarmService;
+    @Inject private ContextService contextService;
+
+    public Uni<PolicyRuleState> constructPolicyStateBasedOnCriteria(
+            Boolean isService,
+            ServiceId serviceId,
+            PolicyRuleService policyRuleService,
+            PolicyRuleBasic policyRuleBasic) {
+
+        if (!isService) {
+            var policyRuleState =
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId));
+
+            return Uni.createFrom().item(policyRuleState);
+        }
+
+        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        final var alarmDescriptorList = commonPolicyService.createAlarmDescriptorList(policyRule);
+
+        if (alarmDescriptorList.isEmpty()) {
+            var policyRuleState =
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED,
+                            String.format(
+                                    "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
+                                    policyRuleBasic.getPolicyRuleId()));
+            return Uni.createFrom().item(policyRuleState);
+        }
+
+        return setPolicyRuleOnContextAndReturnState(policyRule, policyRuleService, alarmDescriptorList);
+    }
+
+    private Uni<PolicyRuleState> setPolicyRuleOnContextAndReturnState(
+            PolicyRule policyRule,
+            PolicyRuleService policyRuleService,
+            List<AlarmDescriptor> alarmDescriptorList) {
+        return contextService
+                .setPolicyRule(policyRule)
+                .onFailure()
+                .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
+                .onItem()
+                .transform(
+                        policyId -> {
+                            commonAlarmService.startMonitoringBasedOnAlarmDescriptors(
+                                    policyId, policyRuleService, alarmDescriptorList);
+
+                            return VALIDATED_POLICYRULE_STATE;
+                        });
+    }
+}
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/policy/CommonAlarmService.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/CommonAlarmService.java
new file mode 100644
index 0000000000000000000000000000000000000000..3cfe6491ebf6e0d5e8b7fa3b5f66f13e6d1c0631
--- /dev/null
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/CommonAlarmService.java
@@ -0,0 +1,189 @@
+/*
+* Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.etsi.tfs.policy.policy;
+
+import static org.etsi.tfs.policy.common.ApplicationProperties.PROVISIONED_POLICYRULE_STATE;
+import static org.etsi.tfs.policy.common.ApplicationProperties.VALIDATED_POLICYRULE_STATE;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import io.smallrye.mutiny.subscription.Cancellable;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
+import org.etsi.tfs.policy.monitoring.MonitoringService;
+import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
+import org.etsi.tfs.policy.monitoring.model.AlarmResponse;
+import org.etsi.tfs.policy.monitoring.model.AlarmSubscription;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.jboss.logging.Logger;
+
+@ApplicationScoped
+public class CommonAlarmService {
+    private static final Logger LOGGER = Logger.getLogger(CommonAlarmService.class);
+
+    @Inject private CommonPolicyServiceImpl commonPolicyServiceImpl;
+    @Inject private MonitoringService monitoringService;
+
+    public void startMonitoringBasedOnAlarmDescriptors(
+            String policyId,
+            PolicyRuleDevice policyRuleDevice,
+            List<AlarmDescriptor> alarmDescriptorList) {
+        commonPolicyServiceImpl.setPolicyRuleDeviceToContext(
+                policyRuleDevice, VALIDATED_POLICYRULE_STATE);
+        commonPolicyServiceImpl.noAlarms = 0;
+
+        List<Uni<String>> alarmIds = createAlarmList(alarmDescriptorList);
+
+        List<Multi<AlarmResponse>> alarmResponseStreamList =
+                transformAlarmIds(alarmIds, policyRuleDevice);
+
+        // Merge the promised alarms into one stream (Multi Object)
+        final var multi = Multi.createBy().merging().streams(alarmResponseStreamList);
+        commonPolicyServiceImpl.setPolicyRuleDeviceToContext(
+                policyRuleDevice, PROVISIONED_POLICYRULE_STATE);
+
+        commonPolicyServiceImpl
+                .getSubscriptionList()
+                .put(policyId, monitorAlarmResponseForDevice(multi));
+
+        // TODO: Resubscribe to the stream, if it has ended
+
+        // TODO: Redesign evaluation of action
+        // evaluateAction(policyRule, alarmDescriptorList, multi);
+    }
+
+    public void startMonitoringBasedOnAlarmDescriptors(
+            String policyId,
+            PolicyRuleService policyRuleService,
+            List<AlarmDescriptor> alarmDescriptorList) {
+        commonPolicyServiceImpl.setPolicyRuleServiceToContext(
+                policyRuleService, VALIDATED_POLICYRULE_STATE);
+        commonPolicyServiceImpl.noAlarms = 0;
+
+        List<Uni<String>> alarmIds =
+                createAlarmList(alarmDescriptorList); // setAllarmtomonitoring get back alarmid
+
+        List<Multi<AlarmResponse>> alarmResponseStreamList =
+                transformAlarmIds(alarmIds, policyRuleService);
+
+        // Merge the promised alarms into one stream (Multi Object)
+        final var multi = Multi.createBy().merging().streams(alarmResponseStreamList);
+        commonPolicyServiceImpl.setPolicyRuleServiceToContext(
+                policyRuleService, PROVISIONED_POLICYRULE_STATE);
+
+        commonPolicyServiceImpl
+                .getSubscriptionList()
+                .put(policyId, monitorAlarmResponseForService(multi));
+
+        // TODO: Resubscribe to the stream, if it has ended
+
+        // TODO: Redesign evaluation of action
+        // evaluateAction(policyRule, alarmDescriptorList, multi);
+    }
+
+    /**
+    * Transform the alarmIds into promised alarms returned from the getAlarmResponseStream
+    *
+    * @param alarmIds the list of alarm ids
+    * @param policyRuleService the policy rule service
+    * @return
+    */
+    private List<Multi<AlarmResponse>> transformAlarmIds(
+            List<Uni<String>> alarmIds, PolicyRuleService policyRuleService) {
+        List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
+        for (Uni<String> alarmId : alarmIds) {
+            Multi<AlarmResponse> alarmResponseStream =
+                    alarmId.onItem().transformToMulti(id -> setPolicyMonitor(policyRuleService, id));
+
+            alarmResponseStreamList.add(alarmResponseStream);
+        }
+        return alarmResponseStreamList;
+    }
+
+    private List<Multi<AlarmResponse>> transformAlarmIds(
+            List<Uni<String>> alarmIds, PolicyRuleDevice policyRuleDevice) {
+        // Transform the alarmIds into promised alarms returned from the
+        // getAlarmResponseStream
+        List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
+        for (Uni<String> alarmId : alarmIds) {
+            alarmResponseStreamList.add(
+                    alarmId.onItem().transformToMulti(id -> setPolicyMonitor(policyRuleDevice, id)));
+        }
+        return alarmResponseStreamList;
+    }
+
+    private Multi<AlarmResponse> setPolicyMonitor(PolicyRuleService policyRuleService, String id) {
+        commonPolicyServiceImpl.getAlarmPolicyRuleServiceMap().put(id, policyRuleService);
+
+        // TODO: Create infinite subscription
+        var alarmSubscription = new AlarmSubscription(id, 259200, 5000);
+        return monitoringService.getAlarmResponseStream(alarmSubscription);
+    }
+
+    private Multi<AlarmResponse> setPolicyMonitor(PolicyRuleDevice policyRuleDevice, String id) {
+        commonPolicyServiceImpl.getAlarmPolicyRuleDeviceMap().put(id, policyRuleDevice);
+
+        // TODO: Create infinite subscription
+        var alarmSubscription = new AlarmSubscription(id, 259200, 5000);
+        return monitoringService.getAlarmResponseStream(alarmSubscription);
+    }
+
+    /**
+    * Create an alarmIds list that contains the promised ids returned from setKpiAlarm
+    *
+    * @param alarmDescriptorList the list of alarm descriptors
+    * @return the list of alarm descriptors
+    */
+    public List<Uni<String>> createAlarmList(List<AlarmDescriptor> alarmDescriptorList) {
+        List<Uni<String>> alarmIds = new ArrayList<Uni<String>>();
+        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+            LOGGER.infof("alarmDescriptor:");
+            LOGGER.infof(alarmDescriptor.toString());
+            alarmIds.add(monitoringService.setKpiAlarm(alarmDescriptor));
+        }
+        return alarmIds;
+    }
+
+    private Cancellable monitorAlarmResponseForService(Multi<AlarmResponse> multi) {
+        return multi
+                .subscribe()
+                .with(
+                        alarmResponse -> {
+                            LOGGER.infof("**************************Received Alarm!**************************");
+                            LOGGER.infof("alarmResponse:");
+                            LOGGER.info(alarmResponse);
+                            LOGGER.info(alarmResponse.getAlarmId());
+                            commonPolicyServiceImpl.applyActionService(alarmResponse.getAlarmId());
+                        });
+    }
+
+    private Cancellable monitorAlarmResponseForDevice(Multi<AlarmResponse> multi) {
+        return multi
+                .subscribe()
+                .with(
+                        alarmResponse -> {
+                            LOGGER.infof("**************************Received Alarm!**************************");
+                            LOGGER.infof("alarmResponse:");
+                            LOGGER.info(alarmResponse);
+                            LOGGER.info(alarmResponse.getAlarmId());
+                            commonPolicyServiceImpl.applyActionDevice(alarmResponse.getAlarmId());
+                        });
+    }
+}
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/policy/CommonPolicyServiceImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/CommonPolicyServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ebceba17bea15ee3f1609b2681acbb65e2d08fe
--- /dev/null
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/CommonPolicyServiceImpl.java
@@ -0,0 +1,541 @@
+/*
+* Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.etsi.tfs.policy.policy;
+
+import static org.etsi.tfs.policy.common.ApplicationProperties.ACTIVE_POLICYRULE_STATE;
+import static org.etsi.tfs.policy.common.ApplicationProperties.ENFORCED_POLICYRULE_STATE;
+import static org.etsi.tfs.policy.common.ApplicationProperties.INVALID_MESSAGE;
+
+import io.smallrye.mutiny.subscription.Cancellable;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.ConcurrentHashMap;
+import org.etsi.tfs.policy.context.ContextService;
+import org.etsi.tfs.policy.context.model.ConfigActionEnum;
+import org.etsi.tfs.policy.context.model.ConfigRule;
+import org.etsi.tfs.policy.context.model.ConfigRuleCustom;
+import org.etsi.tfs.policy.context.model.ConfigRuleTypeCustom;
+import org.etsi.tfs.policy.context.model.Constraint;
+import org.etsi.tfs.policy.context.model.ConstraintCustom;
+import org.etsi.tfs.policy.context.model.ConstraintTypeCustom;
+import org.etsi.tfs.policy.context.model.ServiceConfig;
+import org.etsi.tfs.policy.device.DeviceService;
+import org.etsi.tfs.policy.monitoring.MonitoringService;
+import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
+import org.etsi.tfs.policy.monitoring.model.KpiValueRange;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeService;
+import org.etsi.tfs.policy.service.ServiceService;
+import org.jboss.logging.Logger;
+
+@ApplicationScoped
+public class CommonPolicyServiceImpl {
+
+    private static final Logger LOGGER = Logger.getLogger(CommonPolicyServiceImpl.class);
+
+    @Inject private MonitoringService monitoringService;
+    @Inject private ContextService contextService;
+    @Inject private ServiceService serviceService;
+    @Inject private DeviceService deviceService;
+
+    private static final int POLICY_EVALUATION_TIMEOUT = 5;
+    private static final int ACCEPTABLE_NUMBER_OF_ALARMS = 3;
+    private static final int MONITORING_WINDOW_IN_SECONDS = 5;
+    private static final int SAMPLING_RATE_PER_SECOND = 1;
+
+    // TODO: Find a better way to disregard alarms while reconfiguring path
+    // Temporary solution for not calling the same rpc more than it's needed
+    public static int noAlarms = 0;
+
+    private ConcurrentHashMap<String, PolicyRuleService> alarmPolicyRuleServiceMap =
+            new ConcurrentHashMap<>();
+    private ConcurrentHashMap<String, PolicyRuleDevice> alarmPolicyRuleDeviceMap =
+            new ConcurrentHashMap<>();
+    private ConcurrentHashMap<String, Cancellable> subscriptionList = new ConcurrentHashMap<>();
+    private HashMap<String, PolicyRuleAction> policyRuleActionMap = new HashMap<>();
+
+    public ConcurrentHashMap<String, Cancellable> getSubscriptionList() {
+        return subscriptionList;
+    }
+
+    public ConcurrentHashMap<String, PolicyRuleService> getAlarmPolicyRuleServiceMap() {
+        return alarmPolicyRuleServiceMap;
+    }
+
+    public ConcurrentHashMap<String, PolicyRuleDevice> getAlarmPolicyRuleDeviceMap() {
+        return alarmPolicyRuleDeviceMap;
+    }
+
+    public HashMap<String, PolicyRuleAction> getPolicyRuleActionMap() {
+        return policyRuleActionMap;
+    }
+
+    private static String gen() {
+        Random r = new Random(System.currentTimeMillis());
+        return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000));
+    }
+
+    private static double getTimeStamp() {
+        long now = Instant.now().getEpochSecond();
+        return Long.valueOf(now).doubleValue();
+    }
+
+    public void applyActionService(String alarmId) {
+        PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId);
+        PolicyRuleAction policyRuleAction =
+                policyRuleService.getPolicyRuleBasic().getPolicyRuleActions().get(0);
+
+        if (noAlarms == 0) {
+            noAlarms++;
+            setPolicyRuleServiceToContext(policyRuleService, ACTIVE_POLICYRULE_STATE);
+
+            switch (policyRuleAction.getPolicyRuleActionEnum()) {
+                case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
+                    addServiceConstraint(policyRuleService, policyRuleAction);
+                case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE:
+                    addServiceConfigRule(policyRuleService, policyRuleAction);
+                case POLICY_RULE_ACTION_RECALCULATE_PATH:
+                    callRecalculatePathRPC(policyRuleService, policyRuleAction);
+                default:
+                    LOGGER.errorf(INVALID_MESSAGE, policyRuleAction.getPolicyRuleActionEnum());
+                    return;
+            }
+        } else if (noAlarms == 2) {
+            noAlarms = 0;
+        } else {
+            noAlarms++;
+        }
+    }
+
+    public List<AlarmDescriptor> createAlarmDescriptorList(PolicyRule policyRule) {
+        final var policyRuleType = policyRule.getPolicyRuleType();
+        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
+
+        List<AlarmDescriptor> alarmDescriptorList = new ArrayList<>();
+        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
+            final var policyRuleService = (PolicyRuleService) policyRuleTypeSpecificType;
+            final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+
+            alarmDescriptorList = parsePolicyRuleCondition(policyRuleBasic);
+            if (alarmDescriptorList.isEmpty()) {
+                return List.of();
+            }
+        } else {
+            final var policyRuleDevice = (PolicyRuleDevice) policyRuleTypeSpecificType;
+            final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+
+            alarmDescriptorList = parsePolicyRuleCondition(policyRuleBasic);
+            if (alarmDescriptorList.isEmpty()) {
+                return List.of();
+            }
+            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+                alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
+            }
+        }
+
+        return alarmDescriptorList;
+    }
+
+    private List<AlarmDescriptor> parsePolicyRuleCondition(PolicyRuleBasic policyRuleBasic) {
+        BooleanOperator booleanOperator = policyRuleBasic.getBooleanOperator();
+        if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) {
+            return parsePolicyRuleConditionOr(policyRuleBasic);
+        }
+        if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) {
+            return Arrays.asList(parsePolicyRuleConditionAnd(policyRuleBasic));
+        }
+        return List.of();
+    }
+
+    private List<AlarmDescriptor> parsePolicyRuleConditionOr(PolicyRuleBasic policyRuleBasic) {
+
+        List<PolicyRuleCondition> policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
+        List<AlarmDescriptor> alarmDescriptorList = new ArrayList<>();
+
+        for (PolicyRuleCondition policyRuleCondition : policyRuleConditions) {
+            var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
+
+            // TODO: Temp fix for AlarmDescriptor object
+            AlarmDescriptor alarmDescriptor =
+                    new AlarmDescriptor(
+                            "",
+                            "alarmDescription",
+                            "alarmName-" + gen(),
+                            policyRuleCondition.getKpiId(),
+                            kpiValueRange,
+                            getTimeStamp());
+
+            alarmDescriptorList.add(alarmDescriptor);
+        }
+
+        HashMap<String, PolicyRuleAction> policyRuleActionMap = new HashMap<>();
+        List<PolicyRuleAction> policyRuleActions = policyRuleBasic.getPolicyRuleActions();
+
+        for (int i = 0; i < policyRuleActions.size(); i++) {
+            policyRuleActionMap.put(alarmDescriptorList.get(i).getAlarmId(), policyRuleActions.get(i));
+        }
+
+        return alarmDescriptorList;
+    }
+
+    private AlarmDescriptor parsePolicyRuleConditionAnd(PolicyRuleBasic policyRuleBasic) {
+
+        // TODO: KpiIds should be the same. Add check.
+
+        List<PolicyRuleCondition> policyRuleConditionList = policyRuleBasic.getPolicyRuleConditions();
+        List<String> kpisList = new ArrayList<String>();
+
+        for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
+            kpisList.add(policyRuleCondition.getKpiId());
+        }
+
+        if (policyRuleConditionList.size() > 1) {
+            return createAlarmDescriptorWithRange(policyRuleConditionList);
+        }
+
+        return createAlarmDescriptorWithoutRange(policyRuleConditionList.get(0));
+    }
+
+    private AlarmDescriptor createAlarmDescriptorWithRange(
+            List<PolicyRuleCondition> policyRuleConditionList) {
+
+        final var kpiId = policyRuleConditionList.get(0).getKpiId();
+
+        HashMap<String, KpiValueRange> KpiValueRangeMap = new HashMap<>();
+        for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
+
+            if (!KpiValueRangeMap.containsKey(kpiId)) {
+                var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
+                KpiValueRangeMap.put(kpiId, kpiValueRange);
+                continue;
+            }
+
+            var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
+            // TODO: Handle combineKpiValueRanges exceptions
+            var combinedKpiValueRange =
+                    combineKpiValueRanges(kpiId, KpiValueRangeMap.get(kpiId), kpiValueRange);
+            KpiValueRangeMap.put(kpiId, combinedKpiValueRange);
+        }
+
+        return new AlarmDescriptor(
+                "",
+                "alarmDescription",
+                "alarmName-" + gen(),
+                kpiId,
+                KpiValueRangeMap.get(kpiId),
+                getTimeStamp());
+    }
+
+    private KpiValueRange convertPolicyRuleConditionToKpiValueRange(
+            PolicyRuleCondition policyRuleCondition) {
+
+        switch (policyRuleCondition.getNumericalOperator()) {
+            case POLICY_RULE_CONDITION_NUMERICAL_EQUAL:
+                return new KpiValueRange(
+                        policyRuleCondition.getKpiValue(), policyRuleCondition.getKpiValue(), true, true, true);
+            case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL:
+                return new KpiValueRange(
+                        policyRuleCondition.getKpiValue(),
+                        policyRuleCondition.getKpiValue(),
+                        true,
+                        false,
+                        false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
+                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), true, false, false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
+                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), true, true, false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
+                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, true, false, false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
+                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, true, false, true);
+            default:
+                return null;
+        }
+    }
+
+    private KpiValueRange combineKpiValueRanges(
+            String kpiId, KpiValueRange firstKpiValueRange, KpiValueRange secondKpiValueRange) {
+        if (secondKpiValueRange.getInRange() == true) {
+            LOGGER.errorf("KpiId: %s, has already range values", kpiId);
+            return null;
+        }
+
+        if ((firstKpiValueRange.getKpiMinValue() != null)
+                && (secondKpiValueRange.getKpiMinValue() != null)) {
+            LOGGER.errorf("KpiId: %s, has already min value", kpiId);
+            return null;
+        }
+
+        if ((firstKpiValueRange.getKpiMaxValue() != null)
+                && (secondKpiValueRange.getKpiMinValue() != null)) {
+            LOGGER.errorf("KpiId: %s, has already max value", kpiId);
+            return null;
+        }
+
+        // Objects.nonNull(secondKpiValueRange);
+
+        var kpiMinValue =
+                firstKpiValueRange.getKpiMinValue() != null
+                        ? firstKpiValueRange.getKpiMinValue()
+                        : secondKpiValueRange.getKpiMinValue();
+        var kpiMaxValue =
+                firstKpiValueRange.getKpiMaxValue() != null
+                        ? firstKpiValueRange.getKpiMaxValue()
+                        : secondKpiValueRange.getKpiMaxValue();
+        boolean includeMinValue =
+                firstKpiValueRange.getIncludeMinValue() || secondKpiValueRange.getIncludeMinValue();
+        boolean includeMaxValue =
+                firstKpiValueRange.getIncludeMaxValue() || secondKpiValueRange.getIncludeMaxValue();
+
+        return new KpiValueRange(kpiMinValue, kpiMaxValue, true, includeMinValue, includeMaxValue);
+    }
+
+    private AlarmDescriptor createAlarmDescriptorWithoutRange(
+            PolicyRuleCondition policyRuleCondition) {
+
+        final var kpiId = policyRuleCondition.getKpiId();
+        final var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
+
+        return new AlarmDescriptor(
+                "", "alarmDescription", "alarmName-" + gen(), kpiId, kpiValueRange, getTimeStamp());
+    }
+
+    // TODO: To be refactored or deprecated
+    //    private void evaluateAction(
+    //            PolicyRule policyRule,
+    //            List<AlarmDescriptor> alarmDescriptorList,
+    //            Multi<AlarmResponse> multi) {
+    //
+    //        Long count =
+    //                multi
+    //                        .collect()
+    //                        .with(Collectors.counting())
+    //                        .await()
+    //                        .atMost(Duration.ofMinutes(POLICY_EVALUATION_TIMEOUT));
+    //
+    //        if (count > ACCEPTABLE_NUMBER_OF_ALARMS) {
+    //            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+    //                monitoringService
+    //                        .deleteAlarm(alarmDescriptor.getAlarmId())
+    //                        .subscribe()
+    //                        .with(
+    //                                emptyMessage ->
+    //                                        LOGGER.infof(
+    //                                                "Alarm [%s] has been deleted as ineffective.\n",
+    //                                                alarmDescriptor.getAlarmId()));
+    //            }
+    //            setPolicyRuleToContext(policyRule, INEFFECTIVE_POLICYRULE_STATE);
+    //        } else {
+    //            setPolicyRuleToContext(policyRule, EFFECTIVE_POLICYRULE_STATE);
+    //        }
+    //    }
+
+    public void applyActionDevice(String alarmId) {
+        PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId);
+
+        if (policyRuleActionMap.get(alarmId).getPolicyRuleActionEnum()
+                == PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS) {
+            // In case additional PolicyRuleAction for Devices will be added
+        }
+
+        setPolicyRuleDeviceToContext(policyRuleDevice, ACTIVE_POLICYRULE_STATE);
+
+        List<String> deviceIds = policyRuleDevice.getDeviceIds();
+        List<PolicyRuleActionConfig> actionConfigs =
+                policyRuleActionMap.get(alarmId).getPolicyRuleActionConfigs();
+
+        if (deviceIds.size() != actionConfigs.size()) {
+            String message =
+                    String.format(
+                            "The number of action parameters in PolicyRuleDevice with ID: %s, is not aligned with the number of devices.",
+                            policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId());
+            setPolicyRuleDeviceToContext(
+                    policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
+            return;
+        }
+
+        for (var i = 0; i < deviceIds.size(); i++) {
+            activateDevice(deviceIds.get(i), actionConfigs.get(i));
+        }
+
+        setPolicyRuleDeviceToContext(policyRuleDevice, ENFORCED_POLICYRULE_STATE);
+    }
+
+    private void activateDevice(String deviceId, PolicyRuleActionConfig actionConfig) {
+
+        Boolean toBeEnabled;
+        if (actionConfig.getActionKey() == "ENABLED") {
+            toBeEnabled = true;
+        } else if (actionConfig.getActionKey() == "DISABLED") {
+            toBeEnabled = false;
+        } else {
+            LOGGER.errorf(INVALID_MESSAGE, actionConfig.getActionKey());
+            return;
+        }
+
+        final var deserializedDeviceUni = contextService.getDevice(deviceId);
+
+        deserializedDeviceUni
+                .subscribe()
+                .with(
+                        device -> {
+                            if (toBeEnabled && device.isDisabled()) {
+                                device.enableDevice();
+                            } else if (!toBeEnabled && device.isEnabled()) {
+                                device.disableDevice();
+                            } else {
+                                LOGGER.errorf(INVALID_MESSAGE, "Device is already in the desired state");
+                                return;
+                            }
+
+                            deviceService.configureDevice(device);
+                        });
+    }
+
+    private void addServiceConfigRule(
+            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
+
+        ConfigActionEnum configActionEnum = ConfigActionEnum.SET;
+        List<PolicyRuleActionConfig> actionConfigs = policyRuleAction.getPolicyRuleActionConfigs();
+        List<ConfigRule> newConfigRules = new ArrayList<>();
+
+        for (PolicyRuleActionConfig actionConfig : actionConfigs) {
+            ConfigRuleCustom configRuleCustom =
+                    new ConfigRuleCustom(actionConfig.getActionKey(), actionConfig.getActionValue());
+            ConfigRuleTypeCustom configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+            ConfigRule configRule = new ConfigRule(configActionEnum, configRuleType);
+            newConfigRules.add(configRule);
+        }
+
+        var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
+        deserializedServiceUni
+                .subscribe()
+                .with(
+                        deserializedService -> {
+                            List<ConfigRule> configRules =
+                                    deserializedService.getServiceConfig().getConfigRules();
+                            configRules.addAll(newConfigRules);
+                            deserializedService.setServiceConfig(new ServiceConfig(configRules));
+                        });
+    }
+
+    private void addServiceConstraint(
+            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
+
+        List<PolicyRuleActionConfig> actionConfigs = policyRuleAction.getPolicyRuleActionConfigs();
+        List<Constraint> constraintList = new ArrayList<>();
+
+        for (PolicyRuleActionConfig actionConfig : actionConfigs) {
+            var constraintCustom =
+                    new ConstraintCustom(actionConfig.getActionKey(), actionConfig.getActionValue());
+            var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+            constraintList.add(new Constraint(constraintTypeCustom));
+        }
+
+        final var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
+
+        deserializedServiceUni
+                .subscribe()
+                .with(
+                        deserializedService -> {
+                            deserializedService.appendServiceConstraints(constraintList);
+                            serviceService.updateService(deserializedService);
+                            setPolicyRuleServiceToContext(policyRuleService, ENFORCED_POLICYRULE_STATE);
+                        });
+    }
+
+    private void callRecalculatePathRPC(
+            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
+
+        final var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
+
+        deserializedServiceUni
+                .subscribe()
+                .with(
+                        deserializedService -> {
+                            serviceService
+                                    .recomputeConnections(deserializedService)
+                                    .subscribe()
+                                    .with(
+                                            x -> {
+                                                LOGGER.info("called recomputeConnections with:");
+                                                LOGGER.info(deserializedService);
+                                                setPolicyRuleServiceToContext(policyRuleService, ENFORCED_POLICYRULE_STATE);
+                                            });
+                        });
+    }
+
+    private void setPolicyRuleToContext(PolicyRule policyRule, PolicyRuleState policyRuleState) {
+        final var policyRuleType = policyRule.getPolicyRuleType();
+        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
+
+        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
+            setPolicyRuleServiceToContext(
+                    (PolicyRuleService) policyRuleTypeSpecificType, policyRuleState);
+        }
+        if (policyRuleTypeSpecificType instanceof PolicyRuleDevice) {
+            setPolicyRuleDeviceToContext((PolicyRuleDevice) policyRuleTypeSpecificType, policyRuleState);
+        }
+    }
+
+    public void setPolicyRuleServiceToContext(
+            PolicyRuleService policyRuleService, PolicyRuleState policyRuleState) {
+        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(policyRuleState);
+        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
+
+        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        contextService.setPolicyRule(policyRule).subscribe().with(x -> {});
+    }
+
+    public void setPolicyRuleDeviceToContext(
+            PolicyRuleDevice policyRuleDevice, PolicyRuleState policyRuleState) {
+        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(policyRuleState);
+        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
+
+        final var policyRuleTypeService = new PolicyRuleTypeDevice(policyRuleDevice);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        contextService.setPolicyRule(policyRule).subscribe().with(x -> {});
+    }
+}
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java
index c756f8a2a573780ff27295ce710d4acb7379f756..8a3a86508612be54c860f88159af512e7564c33f 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java
@@ -18,53 +18,18 @@ package org.etsi.tfs.policy.policy;
 
 import static org.etsi.tfs.policy.common.ApplicationProperties.*;
 
-import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
-import io.smallrye.mutiny.groups.UniJoin;
-import io.smallrye.mutiny.subscription.Cancellable;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 import org.etsi.tfs.policy.context.ContextService;
-import org.etsi.tfs.policy.context.model.ConfigActionEnum;
-import org.etsi.tfs.policy.context.model.ConfigRule;
-import org.etsi.tfs.policy.context.model.ConfigRuleCustom;
-import org.etsi.tfs.policy.context.model.ConfigRuleTypeCustom;
-import org.etsi.tfs.policy.context.model.Constraint;
-import org.etsi.tfs.policy.context.model.ConstraintCustom;
-import org.etsi.tfs.policy.context.model.ConstraintTypeCustom;
-import org.etsi.tfs.policy.context.model.ServiceConfig;
-import org.etsi.tfs.policy.context.model.ServiceId;
-import org.etsi.tfs.policy.device.DeviceService;
 import org.etsi.tfs.policy.exception.ExternalServiceFailureException;
-import org.etsi.tfs.policy.monitoring.MonitoringService;
-import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
-import org.etsi.tfs.policy.monitoring.model.AlarmResponse;
-import org.etsi.tfs.policy.monitoring.model.AlarmSubscription;
-import org.etsi.tfs.policy.monitoring.model.KpiValueRange;
-import org.etsi.tfs.policy.policy.model.BooleanOperator;
 import org.etsi.tfs.policy.policy.model.PolicyRule;
-import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
 import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
 import org.etsi.tfs.policy.policy.model.PolicyRuleService;
 import org.etsi.tfs.policy.policy.model.PolicyRuleState;
 import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
-import org.etsi.tfs.policy.policy.model.PolicyRuleTypeDevice;
-import org.etsi.tfs.policy.policy.model.PolicyRuleTypeService;
-import org.etsi.tfs.policy.policy.service.PolicyRuleConditionFieldsGetter;
 import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
-import org.etsi.tfs.policy.service.ServiceService;
 import org.jboss.logging.Logger;
 
 @ApplicationScoped
@@ -72,52 +37,24 @@ public class PolicyServiceImpl implements PolicyService {
 
     private static final Logger LOGGER = Logger.getLogger(PolicyServiceImpl.class);
 
-    private static final int POLICY_EVALUATION_TIMEOUT = 5;
-    private static final int ACCEPTABLE_NUMBER_OF_ALARMS = 3;
-    private static final int MONITORING_WINDOW_IN_SECONDS = 5;
-    private static final int SAMPLING_RATE_PER_SECOND = 1;
-    // TODO: Find a better way to disregard alarms while reconfiguring path
-    // Temporary solution for not calling the same rpc more than it's needed
-    private static int noAlarms = 0;
-
     private final ContextService contextService;
-    private final MonitoringService monitoringService;
-    private final ServiceService serviceService;
-    private final DeviceService deviceService;
     private final PolicyRuleConditionValidator policyRuleConditionValidator;
-    private final PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter;
-
-    private HashMap<String, PolicyRuleAction> policyRuleActionMap = new HashMap<>();
-    private ConcurrentHashMap<String, PolicyRuleService> alarmPolicyRuleServiceMap =
-            new ConcurrentHashMap<>();
-    private ConcurrentHashMap<String, PolicyRuleDevice> alarmPolicyRuleDeviceMap =
-            new ConcurrentHashMap<>();
-    private ConcurrentHashMap<String, Cancellable> subscriptionList = new ConcurrentHashMap<>();
+    private final CommonPolicyServiceImpl commonPolicyServiceImpl;
+    private final AddPolicyServiceImpl addPolicyServiceImpl;
+    private final AddPolicyDeviceImpl addPolicyDeviceImpl;
 
     @Inject
     public PolicyServiceImpl(
             ContextService contextService,
-            MonitoringService monitoringService,
-            ServiceService serviceService,
-            DeviceService deviceService,
             PolicyRuleConditionValidator policyRuleConditionValidator,
-            PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter) {
+            CommonPolicyServiceImpl commonPolicyServiceImpl,
+            AddPolicyServiceImpl addPolicyServiceImpl,
+            AddPolicyDeviceImpl addPolicyDeviceImpl) {
         this.contextService = contextService;
-        this.monitoringService = monitoringService;
-        this.serviceService = serviceService;
-        this.deviceService = deviceService;
         this.policyRuleConditionValidator = policyRuleConditionValidator;
-        this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter;
-    }
-
-    private static String gen() {
-        Random r = new Random(System.currentTimeMillis());
-        return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000));
-    }
-
-    private static double getTimeStamp() {
-        long now = Instant.now().getEpochSecond();
-        return Long.valueOf(now).doubleValue();
+        this.commonPolicyServiceImpl = commonPolicyServiceImpl;
+        this.addPolicyServiceImpl = addPolicyServiceImpl;
+        this.addPolicyDeviceImpl = addPolicyDeviceImpl;
     }
 
     @Override
@@ -152,128 +89,11 @@ public class PolicyServiceImpl implements PolicyService {
                 .onItem()
                 .transform(
                         isService ->
-                                constructPolicyStateBasedOnCriteria(
+                                addPolicyServiceImpl.constructPolicyStateBasedOnCriteria(
                                         isService, serviceId, policyRuleService, policyRuleBasic))
                 .flatMap(Function.identity());
     }
 
-    private Uni<PolicyRuleState> constructPolicyStateBasedOnCriteria(
-            Boolean isService,
-            ServiceId serviceId,
-            PolicyRuleService policyRuleService,
-            PolicyRuleBasic policyRuleBasic) {
-
-        if (!isService) {
-            var policyRuleState =
-                    new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId));
-
-            return Uni.createFrom().item(policyRuleState);
-        }
-
-        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
-        final var alarmDescriptorList = createAlarmDescriptorList(policyRule);
-
-        if (alarmDescriptorList.isEmpty()) {
-            var policyRuleState =
-                    new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED,
-                            String.format(
-                                    "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
-                                    policyRuleBasic.getPolicyRuleId()));
-            return Uni.createFrom().item(policyRuleState);
-        }
-
-        return setPolicyRuleOnContextAndReturnState(policyRule, policyRuleService, alarmDescriptorList);
-    }
-
-    private Uni<PolicyRuleState> setPolicyRuleOnContextAndReturnState(
-            PolicyRule policyRule,
-            PolicyRuleService policyRuleService,
-            List<AlarmDescriptor> alarmDescriptorList) {
-        return contextService
-                .setPolicyRule(policyRule)
-                .onFailure()
-                .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
-                .onItem()
-                .transform(
-                        policyId -> {
-                            startMonitoringBasedOnAlarmDescriptors(
-                                    policyId, policyRuleService, alarmDescriptorList);
-
-                            return VALIDATED_POLICYRULE_STATE;
-                        });
-    }
-
-    private void startMonitoringBasedOnAlarmDescriptors(
-            String policyId,
-            PolicyRuleService policyRuleService,
-            List<AlarmDescriptor> alarmDescriptorList) {
-        setPolicyRuleServiceToContext(policyRuleService, VALIDATED_POLICYRULE_STATE);
-        noAlarms = 0;
-
-        List<Uni<String>> alarmIds =
-                createAlarmList(alarmDescriptorList); // setAllarmtomonitoring get back alarmid
-
-        List<Multi<AlarmResponse>> alarmResponseStreamList =
-                transformAlarmIds(alarmIds, policyRuleService);
-
-        // Merge the promised alarms into one stream (Multi Object)
-        final var multi = Multi.createBy().merging().streams(alarmResponseStreamList);
-        setPolicyRuleServiceToContext(policyRuleService, PROVISIONED_POLICYRULE_STATE);
-
-        subscriptionList.put(policyId, monitorAlarmResponseForService(multi));
-
-        // TODO: Resubscribe to the stream, if it has ended
-
-        // TODO: Redesign evaluation of action
-        // evaluateAction(policyRule, alarmDescriptorList, multi);
-    }
-
-    /**
-    * Transform the alarmIds into promised alarms returned from the getAlarmResponseStream
-    *
-    * @param alarmIds the list of alarm ids
-    * @param policyRuleService the policy rule service
-    * @return
-    */
-    private List<Multi<AlarmResponse>> transformAlarmIds(
-            List<Uni<String>> alarmIds, PolicyRuleService policyRuleService) {
-        List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
-        for (Uni<String> alarmId : alarmIds) {
-            Multi<AlarmResponse> alarmResponseStream =
-                    alarmId.onItem().transformToMulti(id -> setPolicyMonitor(policyRuleService, id));
-
-            alarmResponseStreamList.add(alarmResponseStream);
-        }
-        return alarmResponseStreamList;
-    }
-
-    private Multi<AlarmResponse> setPolicyMonitor(PolicyRuleService policyRuleService, String id) {
-        alarmPolicyRuleServiceMap.put(id, policyRuleService);
-
-        // TODO: Create infinite subscription
-        var alarmSubscription = new AlarmSubscription(id, 259200, 5000);
-        return monitoringService.getAlarmResponseStream(alarmSubscription);
-    }
-
-    /**
-    * Create an alarmIds list that contains the promised ids returned from setKpiAlarm
-    *
-    * @param alarmDescriptorList the list of alarm descriptors
-    * @return the list of alarm descriptors
-    */
-    public List<Uni<String>> createAlarmList(List<AlarmDescriptor> alarmDescriptorList) {
-        List<Uni<String>> alarmIds = new ArrayList<Uni<String>>();
-        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-            LOGGER.infof("alarmDescriptor:");
-            LOGGER.infof(alarmDescriptor.toString());
-            alarmIds.add(monitoringService.setKpiAlarm(alarmDescriptor));
-        }
-        return alarmIds;
-    }
-
     @Override
     public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
         LOGGER.infof("Received %s", policyRuleDevice);
@@ -297,110 +117,17 @@ public class PolicyServiceImpl implements PolicyService {
         }
 
         final var deviceIds = policyRuleDevice.getDeviceIds();
-        final var areDevicesValid = returnInvalidDeviceIds(deviceIds);
+        final var areDevicesValid = addPolicyDeviceImpl.returnInvalidDeviceIds(deviceIds);
 
         return areDevicesValid
-                .onFailure()
-                .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
-                .onItem()
-                .transform(areDevices -> areDeviceOnContext(areDevices, policyRuleDevice, policyRuleBasic))
-                .flatMap(Function.identity());
-    }
-
-    private Uni<PolicyRuleState> areDeviceOnContext(
-            List<Boolean> areDevices,
-            PolicyRuleDevice policyRuleDevice,
-            PolicyRuleBasic policyRuleBasic) {
-        if (areDevices.contains(false)) {
-            var policyRuleState =
-                    new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED,
-                            String.format(
-                                    INVALID_MESSAGE, policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId()));
-
-            return Uni.createFrom().item(policyRuleState);
-        }
-
-        final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
-        final var policyRule = new PolicyRule(policyRuleTypeDevice);
-
-        final var alarmDescriptorList = createAlarmDescriptorList(policyRule);
-        if (alarmDescriptorList.isEmpty()) {
-            var policyRuleState =
-                    new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED,
-                            String.format(
-                                    "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
-                                    policyRuleBasic.getPolicyRuleId()));
-            return Uni.createFrom().item(policyRuleState);
-        }
-
-        return contextService
-                .setPolicyRule(policyRule)
                 .onFailure()
                 .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
                 .onItem()
                 .transform(
-                        policyId -> {
-                            startMonitoringBasedOnAlarmDescriptors(
-                                    policyId, policyRuleDevice, alarmDescriptorList);
-                            return VALIDATED_POLICYRULE_STATE;
-                        });
-    }
-
-    private void startMonitoringBasedOnAlarmDescriptors(
-            String policyId,
-            PolicyRuleDevice policyRuleDevice,
-            List<AlarmDescriptor> alarmDescriptorList) {
-        setPolicyRuleDeviceToContext(policyRuleDevice, VALIDATED_POLICYRULE_STATE);
-        noAlarms = 0;
-
-        List<Uni<String>> alarmIds = getAlarmIds(alarmDescriptorList);
-
-        List<Multi<AlarmResponse>> alarmResponseStreamList =
-                getAlarmResponse(alarmIds, policyRuleDevice);
-
-        // Merge the promised alarms into one stream (Multi Object)
-        final var multi = Multi.createBy().merging().streams(alarmResponseStreamList);
-        setPolicyRuleDeviceToContext(policyRuleDevice, PROVISIONED_POLICYRULE_STATE);
-
-        subscriptionList.put(policyId, monitorAlarmResponseForDevice(multi));
-
-        // TODO: Resubscribe to the stream, if it has ended
-
-        // TODO: Redesign evaluation of action
-        // evaluateAction(policyRule, alarmDescriptorList, multi);
-    }
-
-    private List<Multi<AlarmResponse>> getAlarmResponse(
-            List<Uni<String>> alarmIds, PolicyRuleDevice policyRuleDevice) {
-        // Transform the alarmIds into promised alarms returned from the
-        // getAlarmResponseStream
-        List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
-        for (Uni<String> alarmId : alarmIds) {
-            alarmResponseStreamList.add(
-                    alarmId.onItem().transformToMulti(id -> setPolicyMonitoringDevice(policyRuleDevice, id)));
-        }
-        return alarmResponseStreamList;
-    }
-
-    private Multi<AlarmResponse> setPolicyMonitoringDevice(
-            PolicyRuleDevice policyRuleDevice, String id) {
-        alarmPolicyRuleDeviceMap.put(id, policyRuleDevice);
-
-        // TODO: Create infinite subscription
-        var alarmSubscription = new AlarmSubscription(id, 259200, 5000);
-        return monitoringService.getAlarmResponseStream(alarmSubscription);
-    }
-
-    private List<Uni<String>> getAlarmIds(List<AlarmDescriptor> alarmDescriptorList) {
-        List<Uni<String>> alarmIds = new ArrayList<Uni<String>>();
-        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-            LOGGER.infof("alarmDescriptor:");
-            LOGGER.infof(alarmDescriptor.toString());
-            alarmIds.add(monitoringService.setKpiAlarm(alarmDescriptor));
-        }
-        return alarmIds;
+                        areDevices ->
+                                addPolicyDeviceImpl.areDeviceOnContext(
+                                        areDevices, policyRuleDevice, policyRuleBasic))
+                .flatMap(Function.identity());
     }
 
     @Override
@@ -471,6 +198,8 @@ public class PolicyServiceImpl implements PolicyService {
                 policyRuleConditionValidator.isUpdatedPolicyRuleIdValid(policyRuleId);
 
         return isPolicyRuleValid
+                .onFailure()
+                .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
                 .onItem()
                 .transform(
                         isPolicyRuleService -> {
@@ -504,6 +233,8 @@ public class PolicyServiceImpl implements PolicyService {
 
         contextService
                 .setPolicyRule(policyRule)
+                .onFailure()
+                .transform(failure -> new ExternalServiceFailureException(failure.getMessage()))
                 .subscribe()
                 .with(
                         tmp ->
@@ -513,471 +244,9 @@ public class PolicyServiceImpl implements PolicyService {
         contextService.removePolicyRule(policyId).subscribe().with(x -> {});
 
         // TODO: When the Map doesn't contains the policyId we should throw an exception?
-        if (subscriptionList.contains(policyId)) subscriptionList.get(policyId).cancel();
+        if (commonPolicyServiceImpl.getSubscriptionList().contains(policyId))
+            commonPolicyServiceImpl.getSubscriptionList().get(policyId).cancel();
 
         return policyRuleBasic.getPolicyRuleState();
     }
-
-    private Uni<List<Boolean>> returnInvalidDeviceIds(List<String> deviceIds) {
-        UniJoin.Builder<Boolean> builder = Uni.join().builder();
-        for (String deviceId : deviceIds) {
-            final var validatedDeviceId = policyRuleConditionValidator.isDeviceIdValid(deviceId);
-            builder.add(validatedDeviceId);
-        }
-        return builder.joinAll().andFailFast();
-    }
-
-    private List<AlarmDescriptor> createAlarmDescriptorList(PolicyRule policyRule) {
-        final var policyRuleType = policyRule.getPolicyRuleType();
-        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
-
-        List<AlarmDescriptor> alarmDescriptorList = new ArrayList<>();
-        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
-            final var policyRuleService = (PolicyRuleService) policyRuleTypeSpecificType;
-            final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-
-            alarmDescriptorList = parsePolicyRuleCondition(policyRuleBasic);
-            if (alarmDescriptorList.isEmpty()) {
-                return List.of();
-            }
-        } else {
-            final var policyRuleDevice = (PolicyRuleDevice) policyRuleTypeSpecificType;
-            final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-
-            alarmDescriptorList = parsePolicyRuleCondition(policyRuleBasic);
-            if (alarmDescriptorList.isEmpty()) {
-                return List.of();
-            }
-            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-                alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
-            }
-        }
-
-        return alarmDescriptorList;
-    }
-
-    private Cancellable monitorAlarmResponseForService(Multi<AlarmResponse> multi) {
-        return multi
-                .subscribe()
-                .with(
-                        alarmResponse -> {
-                            LOGGER.infof("**************************Received Alarm!**************************");
-                            LOGGER.infof("alarmResponse:");
-                            LOGGER.info(alarmResponse);
-                            LOGGER.info(alarmResponse.getAlarmId());
-                            applyActionService(alarmResponse.getAlarmId());
-                        });
-    }
-
-    private Cancellable monitorAlarmResponseForDevice(Multi<AlarmResponse> multi) {
-        return multi
-                .subscribe()
-                .with(
-                        alarmResponse -> {
-                            LOGGER.infof("**************************Received Alarm!**************************");
-                            LOGGER.infof("alarmResponse:");
-                            LOGGER.info(alarmResponse);
-                            LOGGER.info(alarmResponse.getAlarmId());
-                            applyActionDevice(alarmResponse.getAlarmId());
-                        });
-    }
-
-    // TODO: To be refactored or deprecated
-    //    private void evaluateAction(
-    //            PolicyRule policyRule,
-    //            List<AlarmDescriptor> alarmDescriptorList,
-    //            Multi<AlarmResponse> multi) {
-    //
-    //        Long count =
-    //                multi
-    //                        .collect()
-    //                        .with(Collectors.counting())
-    //                        .await()
-    //                        .atMost(Duration.ofMinutes(POLICY_EVALUATION_TIMEOUT));
-    //
-    //        if (count > ACCEPTABLE_NUMBER_OF_ALARMS) {
-    //            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-    //                monitoringService
-    //                        .deleteAlarm(alarmDescriptor.getAlarmId())
-    //                        .subscribe()
-    //                        .with(
-    //                                emptyMessage ->
-    //                                        LOGGER.infof(
-    //                                                "Alarm [%s] has been deleted as ineffective.\n",
-    //                                                alarmDescriptor.getAlarmId()));
-    //            }
-    //            setPolicyRuleToContext(policyRule, INEFFECTIVE_POLICYRULE_STATE);
-    //        } else {
-    //            setPolicyRuleToContext(policyRule, EFFECTIVE_POLICYRULE_STATE);
-    //        }
-    //    }
-
-    private void applyActionDevice(String alarmId) {
-        PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId);
-
-        if (policyRuleActionMap.get(alarmId).getPolicyRuleActionEnum()
-                == PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS) {
-            // In case additional PolicyRuleAction for Devices will be added
-        }
-
-        setPolicyRuleDeviceToContext(policyRuleDevice, ACTIVE_POLICYRULE_STATE);
-
-        List<String> deviceIds = policyRuleDevice.getDeviceIds();
-        List<PolicyRuleActionConfig> actionConfigs =
-                policyRuleActionMap.get(alarmId).getPolicyRuleActionConfigs();
-
-        if (deviceIds.size() != actionConfigs.size()) {
-            String message =
-                    String.format(
-                            "The number of action parameters in PolicyRuleDevice with ID: %s, is not aligned with the number of devices.",
-                            policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId());
-            setPolicyRuleDeviceToContext(
-                    policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-            return;
-        }
-
-        for (var i = 0; i < deviceIds.size(); i++) {
-            activateDevice(deviceIds.get(i), actionConfigs.get(i));
-        }
-
-        setPolicyRuleDeviceToContext(policyRuleDevice, ENFORCED_POLICYRULE_STATE);
-    }
-
-    private void activateDevice(String deviceId, PolicyRuleActionConfig actionConfig) {
-
-        Boolean toBeEnabled;
-        if (actionConfig.getActionKey() == "ENABLED") {
-            toBeEnabled = true;
-        } else if (actionConfig.getActionKey() == "DISABLED") {
-            toBeEnabled = false;
-        } else {
-            LOGGER.errorf(INVALID_MESSAGE, actionConfig.getActionKey());
-            return;
-        }
-
-        final var deserializedDeviceUni = contextService.getDevice(deviceId);
-
-        deserializedDeviceUni
-                .subscribe()
-                .with(
-                        device -> {
-                            if (toBeEnabled && device.isDisabled()) {
-                                device.enableDevice();
-                            } else if (!toBeEnabled && device.isEnabled()) {
-                                device.disableDevice();
-                            } else {
-                                LOGGER.errorf(INVALID_MESSAGE, "Device is already in the desired state");
-                                return;
-                            }
-
-                            deviceService.configureDevice(device);
-                        });
-    }
-
-    private void addServiceConfigRule(
-            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
-
-        ConfigActionEnum configActionEnum = ConfigActionEnum.SET;
-        List<PolicyRuleActionConfig> actionConfigs = policyRuleAction.getPolicyRuleActionConfigs();
-        List<ConfigRule> newConfigRules = new ArrayList<>();
-
-        for (PolicyRuleActionConfig actionConfig : actionConfigs) {
-            ConfigRuleCustom configRuleCustom =
-                    new ConfigRuleCustom(actionConfig.getActionKey(), actionConfig.getActionValue());
-            ConfigRuleTypeCustom configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
-            ConfigRule configRule = new ConfigRule(configActionEnum, configRuleType);
-            newConfigRules.add(configRule);
-        }
-
-        var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
-        deserializedServiceUni
-                .subscribe()
-                .with(
-                        deserializedService -> {
-                            List<ConfigRule> configRules =
-                                    deserializedService.getServiceConfig().getConfigRules();
-                            configRules.addAll(newConfigRules);
-                            deserializedService.setServiceConfig(new ServiceConfig(configRules));
-                        });
-    }
-
-    private void addServiceConstraint(
-            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
-
-        List<PolicyRuleActionConfig> actionConfigs = policyRuleAction.getPolicyRuleActionConfigs();
-        List<Constraint> constraintList = new ArrayList<>();
-
-        for (PolicyRuleActionConfig actionConfig : actionConfigs) {
-            var constraintCustom =
-                    new ConstraintCustom(actionConfig.getActionKey(), actionConfig.getActionValue());
-            var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
-            constraintList.add(new Constraint(constraintTypeCustom));
-        }
-
-        final var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
-
-        deserializedServiceUni
-                .subscribe()
-                .with(
-                        deserializedService -> {
-                            deserializedService.appendServiceConstraints(constraintList);
-                            serviceService.updateService(deserializedService);
-                            setPolicyRuleServiceToContext(policyRuleService, ENFORCED_POLICYRULE_STATE);
-                        });
-    }
-
-    private void callRecalculatePathRPC(
-            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
-
-        final var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
-
-        deserializedServiceUni
-                .subscribe()
-                .with(
-                        deserializedService -> {
-                            serviceService
-                                    .recomputeConnections(deserializedService)
-                                    .subscribe()
-                                    .with(
-                                            x -> {
-                                                LOGGER.info("called recomputeConnections with:");
-                                                LOGGER.info(deserializedService);
-                                                setPolicyRuleServiceToContext(policyRuleService, ENFORCED_POLICYRULE_STATE);
-                                            });
-                        });
-    }
-
-    private void applyActionService(String alarmId) {
-        PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId);
-        PolicyRuleAction policyRuleAction =
-                policyRuleService.getPolicyRuleBasic().getPolicyRuleActions().get(0);
-
-        if (noAlarms == 0) {
-            noAlarms++;
-            setPolicyRuleServiceToContext(policyRuleService, ACTIVE_POLICYRULE_STATE);
-
-            switch (policyRuleAction.getPolicyRuleActionEnum()) {
-                case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
-                    addServiceConstraint(policyRuleService, policyRuleAction);
-                case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE:
-                    addServiceConfigRule(policyRuleService, policyRuleAction);
-                case POLICY_RULE_ACTION_RECALCULATE_PATH:
-                    callRecalculatePathRPC(policyRuleService, policyRuleAction);
-                default:
-                    LOGGER.errorf(INVALID_MESSAGE, policyRuleAction.getPolicyRuleActionEnum());
-                    return;
-            }
-        } else if (noAlarms == 2) {
-            noAlarms = 0;
-        } else {
-            noAlarms++;
-        }
-    }
-
-    private List<AlarmDescriptor> parsePolicyRuleCondition(PolicyRuleBasic policyRuleBasic) {
-        BooleanOperator booleanOperator = policyRuleBasic.getBooleanOperator();
-        if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) {
-            return parsePolicyRuleConditionOr(policyRuleBasic);
-        }
-        if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) {
-            return Arrays.asList(parsePolicyRuleConditionAnd(policyRuleBasic));
-        }
-        return List.of();
-    }
-
-    private List<AlarmDescriptor> parsePolicyRuleConditionOr(PolicyRuleBasic policyRuleBasic) {
-
-        List<PolicyRuleCondition> policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
-        List<AlarmDescriptor> alarmDescriptorList = new ArrayList<>();
-
-        for (PolicyRuleCondition policyRuleCondition : policyRuleConditions) {
-            var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
-
-            // TODO: Temp fix for AlarmDescriptor object
-            AlarmDescriptor alarmDescriptor =
-                    new AlarmDescriptor(
-                            "",
-                            "alarmDescription",
-                            "alarmName-" + gen(),
-                            policyRuleCondition.getKpiId(),
-                            kpiValueRange,
-                            getTimeStamp());
-
-            alarmDescriptorList.add(alarmDescriptor);
-        }
-
-        HashMap<String, PolicyRuleAction> policyRuleActionMap = new HashMap<>();
-        List<PolicyRuleAction> policyRuleActions = policyRuleBasic.getPolicyRuleActions();
-
-        for (int i = 0; i < policyRuleActions.size(); i++) {
-            policyRuleActionMap.put(alarmDescriptorList.get(i).getAlarmId(), policyRuleActions.get(i));
-        }
-
-        return alarmDescriptorList;
-    }
-
-    private AlarmDescriptor parsePolicyRuleConditionAnd(PolicyRuleBasic policyRuleBasic) {
-
-        // TODO: KpiIds should be the same. Add check.
-
-        List<PolicyRuleCondition> policyRuleConditionList = policyRuleBasic.getPolicyRuleConditions();
-        List<String> kpisList = new ArrayList<String>();
-
-        for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
-            kpisList.add(policyRuleCondition.getKpiId());
-        }
-
-        if (policyRuleConditionList.size() > 1) {
-            return createAlarmDescriptorWithRange(policyRuleConditionList);
-        }
-
-        return createAlarmDescriptorWithoutRange(policyRuleConditionList.get(0));
-    }
-
-    private AlarmDescriptor createAlarmDescriptorWithoutRange(
-            PolicyRuleCondition policyRuleCondition) {
-
-        final var kpiId = policyRuleCondition.getKpiId();
-        final var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
-
-        return new AlarmDescriptor(
-                "", "alarmDescription", "alarmName-" + gen(), kpiId, kpiValueRange, getTimeStamp());
-    }
-
-    private AlarmDescriptor createAlarmDescriptorWithRange(
-            List<PolicyRuleCondition> policyRuleConditionList) {
-
-        final var kpiId = policyRuleConditionList.get(0).getKpiId();
-
-        HashMap<String, KpiValueRange> KpiValueRangeMap = new HashMap<>();
-        for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
-
-            if (!KpiValueRangeMap.containsKey(kpiId)) {
-                var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
-                KpiValueRangeMap.put(kpiId, kpiValueRange);
-                continue;
-            }
-
-            var kpiValueRange = convertPolicyRuleConditionToKpiValueRange(policyRuleCondition);
-            // TODO: Handle combineKpiValueRanges exceptions
-            var combinedKpiValueRange =
-                    combineKpiValueRanges(kpiId, KpiValueRangeMap.get(kpiId), kpiValueRange);
-            KpiValueRangeMap.put(kpiId, combinedKpiValueRange);
-        }
-
-        return new AlarmDescriptor(
-                "",
-                "alarmDescription",
-                "alarmName-" + gen(),
-                kpiId,
-                KpiValueRangeMap.get(kpiId),
-                getTimeStamp());
-    }
-
-    private KpiValueRange convertPolicyRuleConditionToKpiValueRange(
-            PolicyRuleCondition policyRuleCondition) {
-
-        switch (policyRuleCondition.getNumericalOperator()) {
-            case POLICY_RULE_CONDITION_NUMERICAL_EQUAL:
-                return new KpiValueRange(
-                        policyRuleCondition.getKpiValue(), policyRuleCondition.getKpiValue(), true, true, true);
-            case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL:
-                return new KpiValueRange(
-                        policyRuleCondition.getKpiValue(),
-                        policyRuleCondition.getKpiValue(),
-                        true,
-                        false,
-                        false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
-                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), true, false, false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
-                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), true, true, false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
-                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, true, false, false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
-                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, true, false, true);
-            default:
-                return null;
-        }
-    }
-
-    private KpiValueRange combineKpiValueRanges(
-            String kpiId, KpiValueRange firstKpiValueRange, KpiValueRange secondKpiValueRange) {
-        if (secondKpiValueRange.getInRange() == true) {
-            LOGGER.errorf("KpiId: %s, has already range values", kpiId);
-            return null;
-        }
-
-        if ((firstKpiValueRange.getKpiMinValue() != null)
-                && (secondKpiValueRange.getKpiMinValue() != null)) {
-            LOGGER.errorf("KpiId: %s, has already min value", kpiId);
-            return null;
-        }
-
-        if ((firstKpiValueRange.getKpiMaxValue() != null)
-                && (secondKpiValueRange.getKpiMinValue() != null)) {
-            LOGGER.errorf("KpiId: %s, has already max value", kpiId);
-            return null;
-        }
-
-        // Objects.nonNull(secondKpiValueRange);
-
-        var kpiMinValue =
-                firstKpiValueRange.getKpiMinValue() != null
-                        ? firstKpiValueRange.getKpiMinValue()
-                        : secondKpiValueRange.getKpiMinValue();
-        var kpiMaxValue =
-                firstKpiValueRange.getKpiMaxValue() != null
-                        ? firstKpiValueRange.getKpiMaxValue()
-                        : secondKpiValueRange.getKpiMaxValue();
-        boolean includeMinValue =
-                firstKpiValueRange.getIncludeMinValue() || secondKpiValueRange.getIncludeMinValue();
-        boolean includeMaxValue =
-                firstKpiValueRange.getIncludeMaxValue() || secondKpiValueRange.getIncludeMaxValue();
-
-        return new KpiValueRange(kpiMinValue, kpiMaxValue, true, includeMinValue, includeMaxValue);
-    }
-
-    private void setPolicyRuleToContext(PolicyRule policyRule, PolicyRuleState policyRuleState) {
-        final var policyRuleType = policyRule.getPolicyRuleType();
-        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
-
-        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
-            setPolicyRuleServiceToContext(
-                    (PolicyRuleService) policyRuleTypeSpecificType, policyRuleState);
-        }
-        if (policyRuleTypeSpecificType instanceof PolicyRuleDevice) {
-            setPolicyRuleDeviceToContext((PolicyRuleDevice) policyRuleTypeSpecificType, policyRuleState);
-        }
-    }
-
-    private void setPolicyRuleServiceToContext(
-            PolicyRuleService policyRuleService, PolicyRuleState policyRuleState) {
-        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(policyRuleState);
-        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
-
-        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
-        contextService.setPolicyRule(policyRule).subscribe().with(x -> {});
-    }
-
-    private void setPolicyRuleDeviceToContext(
-            PolicyRuleDevice policyRuleDevice, PolicyRuleState policyRuleState) {
-        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(policyRuleState);
-        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
-
-        final var policyRuleTypeService = new PolicyRuleTypeDevice(policyRuleDevice);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
-        contextService.setPolicyRule(policyRule).subscribe().with(x -> {});
-    }
 }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index 22679d79248b2374c8f96e7f5286ac81e37c8517..9bcff8a508b13a45e47ceb0f1bbd70a751071a9f 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -191,6 +191,10 @@ public final class ContextOuterClass {
          * <code>DEVICEDRIVER_IETF_ACTN = 10;</code>
          */
         DEVICEDRIVER_IETF_ACTN(10),
+        /**
+         * <code>DEVICEDRIVER_OC = 11;</code>
+         */
+        DEVICEDRIVER_OC(11),
         UNRECOGNIZED(-1);
 
         /**
@@ -252,6 +256,11 @@ public final class ContextOuterClass {
          */
         public static final int DEVICEDRIVER_IETF_ACTN_VALUE = 10;
 
+        /**
+         * <code>DEVICEDRIVER_OC = 11;</code>
+         */
+        public static final int DEVICEDRIVER_OC_VALUE = 11;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -297,6 +306,8 @@ public final class ContextOuterClass {
                     return DEVICEDRIVER_FLEXSCALE;
                 case 10:
                     return DEVICEDRIVER_IETF_ACTN;
+                case 11:
+                    return DEVICEDRIVER_OC;
                 default:
                     return null;
             }
@@ -489,6 +500,10 @@ public final class ContextOuterClass {
          * <code>SERVICETYPE_E2E = 5;</code>
          */
         SERVICETYPE_E2E(5),
+        /**
+         * <code>SERVICETYPE_OPTICAL_CONNECTIVITY = 6;</code>
+         */
+        SERVICETYPE_OPTICAL_CONNECTIVITY(6),
         UNRECOGNIZED(-1);
 
         /**
@@ -521,6 +536,11 @@ public final class ContextOuterClass {
          */
         public static final int SERVICETYPE_E2E_VALUE = 5;
 
+        /**
+         * <code>SERVICETYPE_OPTICAL_CONNECTIVITY = 6;</code>
+         */
+        public static final int SERVICETYPE_OPTICAL_CONNECTIVITY_VALUE = 6;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -556,6 +576,8 @@ public final class ContextOuterClass {
                     return SERVICETYPE_TE;
                 case 5:
                     return SERVICETYPE_E2E;
+                case 6:
+                    return SERVICETYPE_OPTICAL_CONNECTIVITY;
                 default:
                     return null;
             }
@@ -69295,199 +69317,7217 @@ public final class ContextOuterClass {
         }
     }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Empty_descriptor;
-
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Empty_fieldAccessorTable;
-
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Uuid_descriptor;
-
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Uuid_fieldAccessorTable;
+    public interface OpticalConfigIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigId)
+    com.google.protobuf.MessageOrBuilder {
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Timestamp_descriptor;
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The opticalconfigUuid.
+         */
+        java.lang.String getOpticalconfigUuid();
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Timestamp_fieldAccessorTable;
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The bytes for opticalconfigUuid.
+         */
+        com.google.protobuf.ByteString getOpticalconfigUuidBytes();
+    }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Event_descriptor;
+    /**
+     * <pre>
+     * ---------------- Experimental ------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.OpticalConfigId}
+     */
+    public static final class OpticalConfigId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigId)
+    OpticalConfigIdOrBuilder {
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Event_fieldAccessorTable;
+        private static final long serialVersionUID = 0L;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextId_descriptor;
+        // Use OpticalConfigId.newBuilder() to construct.
+        private OpticalConfigId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextId_fieldAccessorTable;
+        private OpticalConfigId() {
+            opticalconfigUuid_ = "";
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Context_descriptor;
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalConfigId();
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Context_fieldAccessorTable;
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextIdList_descriptor;
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextIdList_fieldAccessorTable;
+        public static final int OPTICALCONFIG_UUID_FIELD_NUMBER = 1;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextList_descriptor;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object opticalconfigUuid_ = "";
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextList_fieldAccessorTable;
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The opticalconfigUuid.
+         */
+        @java.lang.Override
+        public java.lang.String getOpticalconfigUuid() {
+            java.lang.Object ref = opticalconfigUuid_;
+            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();
+                opticalconfigUuid_ = s;
+                return s;
+            }
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextEvent_descriptor;
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The bytes for opticalconfigUuid.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
+            java.lang.Object ref = opticalconfigUuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                opticalconfigUuid_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextEvent_fieldAccessorTable;
+        private byte memoizedIsInitialized = -1;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyId_descriptor;
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyId_fieldAccessorTable;
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, opticalconfigUuid_);
+            }
+            getUnknownFields().writeTo(output);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Topology_descriptor;
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, opticalconfigUuid_);
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Topology_fieldAccessorTable;
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfigId)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalConfigId other = (context.ContextOuterClass.OpticalConfigId) obj;
+            if (!getOpticalconfigUuid().equals(other.getOpticalconfigUuid()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyDetails_descriptor;
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + OPTICALCONFIG_UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getOpticalconfigUuid().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyDetails_fieldAccessorTable;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyIdList_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyIdList_fieldAccessorTable;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyList_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyList_fieldAccessorTable;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyEvent_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyEvent_fieldAccessorTable;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceId_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceId_fieldAccessorTable;
+        public static context.ContextOuterClass.OpticalConfigId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Device_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Device_fieldAccessorTable;
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Component_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId 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 static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Component_fieldAccessorTable;
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Component_AttributesEntry_descriptor;
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Component_AttributesEntry_fieldAccessorTable;
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigId prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceConfig_descriptor;
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceConfig_fieldAccessorTable;
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceIdList_descriptor;
+        /**
+         * <pre>
+         * ---------------- Experimental ------------------------
+         * </pre>
+         *
+         * Protobuf type {@code context.OpticalConfigId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigId)
+        context.ContextOuterClass.OpticalConfigIdOrBuilder {
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceIdList_fieldAccessorTable;
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceList_descriptor;
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceList_fieldAccessorTable;
+            // Construct using context.ContextOuterClass.OpticalConfigId.newBuilder()
+            private Builder() {
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceFilter_descriptor;
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceFilter_fieldAccessorTable;
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                opticalconfigUuid_ = "";
+                return this;
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceEvent_descriptor;
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceEvent_fieldAccessorTable;
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigId.getDefaultInstance();
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkId_descriptor;
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigId build() {
+                context.ContextOuterClass.OpticalConfigId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkId_fieldAccessorTable;
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigId buildPartial() {
+                context.ContextOuterClass.OpticalConfigId result = new context.ContextOuterClass.OpticalConfigId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkAttributes_descriptor;
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.opticalconfigUuid_ = opticalconfigUuid_;
+                }
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkAttributes_fieldAccessorTable;
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalConfigId) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Link_descriptor;
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigId other) {
+                if (other == context.ContextOuterClass.OpticalConfigId.getDefaultInstance())
+                    return this;
+                if (!other.getOpticalconfigUuid().isEmpty()) {
+                    opticalconfigUuid_ = other.opticalconfigUuid_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Link_fieldAccessorTable;
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkIdList_descriptor;
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    opticalconfigUuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkIdList_fieldAccessorTable;
+            private int bitField0_;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkList_descriptor;
+            private java.lang.Object opticalconfigUuid_ = "";
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkList_fieldAccessorTable;
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return The opticalconfigUuid.
+             */
+            public java.lang.String getOpticalconfigUuid() {
+                java.lang.Object ref = opticalconfigUuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    opticalconfigUuid_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkEvent_descriptor;
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return The bytes for opticalconfigUuid.
+             */
+            public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
+                java.lang.Object ref = opticalconfigUuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    opticalconfigUuid_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkEvent_fieldAccessorTable;
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @param value The opticalconfigUuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOpticalconfigUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                opticalconfigUuid_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceId_descriptor;
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearOpticalconfigUuid() {
+                opticalconfigUuid_ = getDefaultInstance().getOpticalconfigUuid();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceId_fieldAccessorTable;
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @param value The bytes for opticalconfigUuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOpticalconfigUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                opticalconfigUuid_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Service_descriptor;
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Service_fieldAccessorTable;
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigId)
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceStatus_descriptor;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigId)
+        private static final context.ContextOuterClass.OpticalConfigId DEFAULT_INSTANCE;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceStatus_fieldAccessorTable;
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigId();
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceConfig_descriptor;
+        public static context.ContextOuterClass.OpticalConfigId getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceConfig_fieldAccessorTable;
+        private static final com.google.protobuf.Parser<OpticalConfigId> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigId>() {
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceIdList_descriptor;
+            @java.lang.Override
+            public OpticalConfigId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceIdList_fieldAccessorTable;
+        public static com.google.protobuf.Parser<OpticalConfigId> parser() {
+            return PARSER;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceList_descriptor;
+        @java.lang.Override
+        public com.google.protobuf.Parser<OpticalConfigId> getParserForType() {
+            return PARSER;
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceList_fieldAccessorTable;
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceFilter_descriptor;
+    public interface OpticalConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfig)
+    com.google.protobuf.MessageOrBuilder {
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceFilter_fieldAccessorTable;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return Whether the opticalconfigId field is set.
+         */
+        boolean hasOpticalconfigId();
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceEvent_descriptor;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return The opticalconfigId.
+         */
+        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceEvent_fieldAccessorTable;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         */
+        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceId_descriptor;
+        /**
+         * <code>string config = 2;</code>
+         * @return The config.
+         */
+        java.lang.String getConfig();
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceId_fieldAccessorTable;
+        /**
+         * <code>string config = 2;</code>
+         * @return The bytes for config.
+         */
+        com.google.protobuf.ByteString getConfigBytes();
+    }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Slice_descriptor;
+    /**
+     * Protobuf type {@code context.OpticalConfig}
+     */
+    public static final class OpticalConfig extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfig)
+    OpticalConfigOrBuilder {
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Slice_fieldAccessorTable;
+        private static final long serialVersionUID = 0L;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceOwner_descriptor;
+        // Use OpticalConfig.newBuilder() to construct.
+        private OpticalConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceOwner_fieldAccessorTable;
+        private OpticalConfig() {
+            config_ = "";
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceStatus_descriptor;
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalConfig();
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceStatus_fieldAccessorTable;
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceConfig_descriptor;
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceConfig_fieldAccessorTable;
+        public static final int OPTICALCONFIG_ID_FIELD_NUMBER = 1;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceIdList_descriptor;
+        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceIdList_fieldAccessorTable;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return Whether the opticalconfigId field is set.
+         */
+        @java.lang.Override
+        public boolean hasOpticalconfigId() {
+            return opticalconfigId_ != null;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceList_descriptor;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return The opticalconfigId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceList_fieldAccessorTable;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceFilter_descriptor;
+        public static final int CONFIG_FIELD_NUMBER = 2;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceFilter_fieldAccessorTable;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object config_ = "";
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceEvent_descriptor;
+        /**
+         * <code>string config = 2;</code>
+         * @return The config.
+         */
+        @java.lang.Override
+        public java.lang.String getConfig() {
+            java.lang.Object ref = config_;
+            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();
+                config_ = s;
+                return s;
+            }
+        }
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceEvent_fieldAccessorTable;
+        /**
+         * <code>string config = 2;</code>
+         * @return The bytes for config.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getConfigBytes() {
+            java.lang.Object ref = config_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                config_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConnectionId_descriptor;
+        private byte memoizedIsInitialized = -1;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConnectionId_fieldAccessorTable;
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConnectionSettings_L0_descriptor;
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (opticalconfigId_ != null) {
+                output.writeMessage(1, getOpticalconfigId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (opticalconfigId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalconfigId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_);
+            }
+            size += getUnknownFields().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.OpticalConfig)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalConfig other = (context.ContextOuterClass.OpticalConfig) obj;
+            if (hasOpticalconfigId() != other.hasOpticalconfigId())
+                return false;
+            if (hasOpticalconfigId()) {
+                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
+                    return false;
+            }
+            if (!getConfig().equals(other.getConfig()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasOpticalconfigId()) {
+                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigId().hashCode();
+            }
+            hash = (37 * hash) + CONFIG_FIELD_NUMBER;
+            hash = (53 * hash) + getConfig().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfig parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfig 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.OpticalConfig}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfig)
+        context.ContextOuterClass.OpticalConfigOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.OpticalConfig.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                config_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfig.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfig build() {
+                context.ContextOuterClass.OpticalConfig result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfig buildPartial() {
+                context.ContextOuterClass.OpticalConfig result = new context.ContextOuterClass.OpticalConfig(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalConfig result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.opticalconfigId_ = opticalconfigIdBuilder_ == null ? opticalconfigId_ : opticalconfigIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.config_ = config_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalConfig) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfig) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfig other) {
+                if (other == context.ContextOuterClass.OpticalConfig.getDefaultInstance())
+                    return this;
+                if (other.hasOpticalconfigId()) {
+                    mergeOpticalconfigId(other.getOpticalconfigId());
+                }
+                if (!other.getConfig().isEmpty()) {
+                    config_ = other.config_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getOpticalconfigIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    config_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * @return Whether the opticalconfigId field is set.
+             */
+            public boolean hasOpticalconfigId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * @return The opticalconfigId.
+             */
+            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+                if (opticalconfigIdBuilder_ == null) {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                } else {
+                    return opticalconfigIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalconfigId_ = value;
+                } else {
+                    opticalconfigIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigId_ = builderForValue.build();
+                } else {
+                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && opticalconfigId_ != null && opticalconfigId_ != context.ContextOuterClass.OpticalConfigId.getDefaultInstance()) {
+                        getOpticalconfigIdBuilder().mergeFrom(value);
+                    } else {
+                        opticalconfigId_ = value;
+                    }
+                } else {
+                    opticalconfigIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder clearOpticalconfigId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getOpticalconfigIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+                if (opticalconfigIdBuilder_ != null) {
+                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                }
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
+                    opticalconfigId_ = null;
+                }
+                return opticalconfigIdBuilder_;
+            }
+
+            private java.lang.Object config_ = "";
+
+            /**
+             * <code>string config = 2;</code>
+             * @return The config.
+             */
+            public java.lang.String getConfig() {
+                java.lang.Object ref = config_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    config_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @return The bytes for config.
+             */
+            public com.google.protobuf.ByteString getConfigBytes() {
+                java.lang.Object ref = config_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    config_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @param value The config to set.
+             * @return This builder for chaining.
+             */
+            public Builder setConfig(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                config_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearConfig() {
+                config_ = getDefaultInstance().getConfig();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @param value The bytes for config to set.
+             * @return This builder for chaining.
+             */
+            public Builder setConfigBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                config_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            @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.OpticalConfig)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.OpticalConfig)
+        private static final context.ContextOuterClass.OpticalConfig DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfig();
+        }
+
+        public static context.ContextOuterClass.OpticalConfig getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<OpticalConfig> PARSER = new com.google.protobuf.AbstractParser<OpticalConfig>() {
+
+            @java.lang.Override
+            public OpticalConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<OpticalConfig> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<OpticalConfig> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface OpticalConfigListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigList)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList();
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index);
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        int getOpticalconfigsCount();
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList();
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index);
+    }
+
+    /**
+     * Protobuf type {@code context.OpticalConfigList}
+     */
+    public static final class OpticalConfigList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigList)
+    OpticalConfigListOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use OpticalConfigList.newBuilder() to construct.
+        private OpticalConfigList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private OpticalConfigList() {
+            opticalconfigs_ = java.util.Collections.emptyList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalConfigList();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
+        }
+
+        public static final int OPTICALCONFIGS_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_;
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
+            return opticalconfigs_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
+            return opticalconfigs_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        @java.lang.Override
+        public int getOpticalconfigsCount() {
+            return opticalconfigs_.size();
+        }
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
+            return opticalconfigs_.get(index);
+        }
+
+        /**
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
+            return opticalconfigs_.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 < opticalconfigs_.size(); i++) {
+                output.writeMessage(1, opticalconfigs_.get(i));
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            for (int i = 0; i < opticalconfigs_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalconfigs_.get(i));
+            }
+            size += getUnknownFields().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.OpticalConfigList)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalConfigList other = (context.ContextOuterClass.OpticalConfigList) obj;
+            if (!getOpticalconfigsList().equals(other.getOpticalconfigsList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (getOpticalconfigsCount() > 0) {
+                hash = (37 * hash) + OPTICALCONFIGS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigsList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfigList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfigList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfigList 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.OpticalConfigList}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigList)
+        context.ContextOuterClass.OpticalConfigListOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.OpticalConfigList.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigs_ = java.util.Collections.emptyList();
+                } else {
+                    opticalconfigs_ = null;
+                    opticalconfigsBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000001);
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigList.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigList build() {
+                context.ContextOuterClass.OpticalConfigList result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigList buildPartial() {
+                context.ContextOuterClass.OpticalConfigList result = new context.ContextOuterClass.OpticalConfigList(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalConfigList result) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        opticalconfigs_ = java.util.Collections.unmodifiableList(opticalconfigs_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.opticalconfigs_ = opticalconfigs_;
+                } else {
+                    result.opticalconfigs_ = opticalconfigsBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigList result) {
+                int from_bitField0_ = bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalConfigList) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigList) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigList other) {
+                if (other == context.ContextOuterClass.OpticalConfigList.getDefaultInstance())
+                    return this;
+                if (opticalconfigsBuilder_ == null) {
+                    if (!other.opticalconfigs_.isEmpty()) {
+                        if (opticalconfigs_.isEmpty()) {
+                            opticalconfigs_ = other.opticalconfigs_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureOpticalconfigsIsMutable();
+                            opticalconfigs_.addAll(other.opticalconfigs_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalconfigs_.isEmpty()) {
+                        if (opticalconfigsBuilder_.isEmpty()) {
+                            opticalconfigsBuilder_.dispose();
+                            opticalconfigsBuilder_ = null;
+                            opticalconfigs_ = other.opticalconfigs_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            opticalconfigsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalconfigsFieldBuilder() : null;
+                        } else {
+                            opticalconfigsBuilder_.addAllMessages(other.opticalconfigs_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.OpticalConfig m = input.readMessage(context.ContextOuterClass.OpticalConfig.parser(), extensionRegistry);
+                                    if (opticalconfigsBuilder_ == null) {
+                                        ensureOpticalconfigsIsMutable();
+                                        opticalconfigs_.add(m);
+                                    } else {
+                                        opticalconfigsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalconfigsIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    opticalconfigs_ = new java.util.ArrayList<context.ContextOuterClass.OpticalConfig>(opticalconfigs_);
+                    bitField0_ |= 0x00000001;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> opticalconfigsBuilder_;
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
+                if (opticalconfigsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalconfigs_);
+                } else {
+                    return opticalconfigsBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public int getOpticalconfigsCount() {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.size();
+                } else {
+                    return opticalconfigsBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.get(index);
+                } else {
+                    return opticalconfigsBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(value);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder addAllOpticalconfigs(java.lang.Iterable<? extends context.ContextOuterClass.OpticalConfig> values) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalconfigs_);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder clearOpticalconfigs() {
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigs_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder removeOpticalconfigs(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.remove(index);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfig.Builder getOpticalconfigsBuilder(int index) {
+                return getOpticalconfigsFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.get(index);
+                } else {
+                    return opticalconfigsBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
+                if (opticalconfigsBuilder_ != null) {
+                    return opticalconfigsBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalconfigs_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder() {
+                return getOpticalconfigsFieldBuilder().addBuilder(context.ContextOuterClass.OpticalConfig.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder(int index) {
+                return getOpticalconfigsFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalConfig.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalConfig.Builder> getOpticalconfigsBuilderList() {
+                return getOpticalconfigsFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsFieldBuilder() {
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder>(opticalconfigs_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    opticalconfigs_ = null;
+                }
+                return opticalconfigsBuilder_;
+            }
+
+            @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.OpticalConfigList)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigList)
+        private static final context.ContextOuterClass.OpticalConfigList DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigList();
+        }
+
+        public static context.ContextOuterClass.OpticalConfigList getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<OpticalConfigList> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigList>() {
+
+            @java.lang.Override
+            public OpticalConfigList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<OpticalConfigList> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<OpticalConfigList> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface OpticalLinkIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkId)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * @return Whether the opticalLinkUuid field is set.
+         */
+        boolean hasOpticalLinkUuid();
+
+        /**
+         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * @return The opticalLinkUuid.
+         */
+        context.ContextOuterClass.Uuid getOpticalLinkUuid();
+
+        /**
+         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         */
+        context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.OpticalLinkId}
+     */
+    public static final class OpticalLinkId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkId)
+    OpticalLinkIdOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use OpticalLinkId.newBuilder() to construct.
+        private OpticalLinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private OpticalLinkId() {
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalLinkId();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalLinkId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkId.class, context.ContextOuterClass.OpticalLinkId.Builder.class);
+        }
+
+        public static final int OPTICAL_LINK_UUID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.Uuid opticalLinkUuid_;
+
+        /**
+         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * @return Whether the opticalLinkUuid field is set.
+         */
+        @java.lang.Override
+        public boolean hasOpticalLinkUuid() {
+            return opticalLinkUuid_ != null;
+        }
+
+        /**
+         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * @return The opticalLinkUuid.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Uuid getOpticalLinkUuid() {
+            return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+        }
+
+        /**
+         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder() {
+            return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+        }
+
+        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 (opticalLinkUuid_ != null) {
+                output.writeMessage(1, getOpticalLinkUuid());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (opticalLinkUuid_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalLinkUuid());
+            }
+            size += getUnknownFields().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.OpticalLinkId)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalLinkId other = (context.ContextOuterClass.OpticalLinkId) obj;
+            if (hasOpticalLinkUuid() != other.hasOpticalLinkUuid())
+                return false;
+            if (hasOpticalLinkUuid()) {
+                if (!getOpticalLinkUuid().equals(other.getOpticalLinkUuid()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasOpticalLinkUuid()) {
+                hash = (37 * hash) + OPTICAL_LINK_UUID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinkUuid().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId 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.OpticalLinkId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId 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.OpticalLinkId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId 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.OpticalLinkId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId 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.OpticalLinkId 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.OpticalLinkId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkId)
+        context.ContextOuterClass.OpticalLinkIdOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalLinkId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkId.class, context.ContextOuterClass.OpticalLinkId.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.OpticalLinkId.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                opticalLinkUuid_ = null;
+                if (opticalLinkUuidBuilder_ != null) {
+                    opticalLinkUuidBuilder_.dispose();
+                    opticalLinkUuidBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLinkId getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLinkId.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLinkId build() {
+                context.ContextOuterClass.OpticalLinkId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLinkId buildPartial() {
+                context.ContextOuterClass.OpticalLinkId result = new context.ContextOuterClass.OpticalLinkId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalLinkId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.opticalLinkUuid_ = opticalLinkUuidBuilder_ == null ? opticalLinkUuid_ : opticalLinkUuidBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalLinkId) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLinkId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkId other) {
+                if (other == context.ContextOuterClass.OpticalLinkId.getDefaultInstance())
+                    return this;
+                if (other.hasOpticalLinkUuid()) {
+                    mergeOpticalLinkUuid(other.getOpticalLinkUuid());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getOpticalLinkUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.Uuid opticalLinkUuid_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> opticalLinkUuidBuilder_;
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * @return Whether the opticalLinkUuid field is set.
+             */
+            public boolean hasOpticalLinkUuid() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * @return The opticalLinkUuid.
+             */
+            public context.ContextOuterClass.Uuid getOpticalLinkUuid() {
+                if (opticalLinkUuidBuilder_ == null) {
+                    return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+                } else {
+                    return opticalLinkUuidBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            public Builder setOpticalLinkUuid(context.ContextOuterClass.Uuid value) {
+                if (opticalLinkUuidBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalLinkUuid_ = value;
+                } else {
+                    opticalLinkUuidBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            public Builder setOpticalLinkUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
+                if (opticalLinkUuidBuilder_ == null) {
+                    opticalLinkUuid_ = builderForValue.build();
+                } else {
+                    opticalLinkUuidBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            public Builder mergeOpticalLinkUuid(context.ContextOuterClass.Uuid value) {
+                if (opticalLinkUuidBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && opticalLinkUuid_ != null && opticalLinkUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getOpticalLinkUuidBuilder().mergeFrom(value);
+                    } else {
+                        opticalLinkUuid_ = value;
+                    }
+                } else {
+                    opticalLinkUuidBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            public Builder clearOpticalLinkUuid() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                opticalLinkUuid_ = null;
+                if (opticalLinkUuidBuilder_ != null) {
+                    opticalLinkUuidBuilder_.dispose();
+                    opticalLinkUuidBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            public context.ContextOuterClass.Uuid.Builder getOpticalLinkUuidBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getOpticalLinkUuidFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            public context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder() {
+                if (opticalLinkUuidBuilder_ != null) {
+                    return opticalLinkUuidBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+                }
+            }
+
+            /**
+             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getOpticalLinkUuidFieldBuilder() {
+                if (opticalLinkUuidBuilder_ == null) {
+                    opticalLinkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getOpticalLinkUuid(), getParentForChildren(), isClean());
+                    opticalLinkUuid_ = null;
+                }
+                return opticalLinkUuidBuilder_;
+            }
+
+            @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.OpticalLinkId)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.OpticalLinkId)
+        private static final context.ContextOuterClass.OpticalLinkId DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkId();
+        }
+
+        public static context.ContextOuterClass.OpticalLinkId getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<OpticalLinkId> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkId>() {
+
+            @java.lang.Override
+            public OpticalLinkId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<OpticalLinkId> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<OpticalLinkId> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkId getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface FiberIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.FiberId)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * @return Whether the fiberUuid field is set.
+         */
+        boolean hasFiberUuid();
+
+        /**
+         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * @return The fiberUuid.
+         */
+        context.ContextOuterClass.Uuid getFiberUuid();
+
+        /**
+         * <code>.context.Uuid fiber_uuid = 1;</code>
+         */
+        context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.FiberId}
+     */
+    public static final class FiberId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.FiberId)
+    FiberIdOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use FiberId.newBuilder() to construct.
+        private FiberId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private FiberId() {
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new FiberId();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_FiberId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.FiberId.class, context.ContextOuterClass.FiberId.Builder.class);
+        }
+
+        public static final int FIBER_UUID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.Uuid fiberUuid_;
+
+        /**
+         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * @return Whether the fiberUuid field is set.
+         */
+        @java.lang.Override
+        public boolean hasFiberUuid() {
+            return fiberUuid_ != null;
+        }
+
+        /**
+         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * @return The fiberUuid.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Uuid getFiberUuid() {
+            return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+        }
+
+        /**
+         * <code>.context.Uuid fiber_uuid = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder() {
+            return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+        }
+
+        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 (fiberUuid_ != null) {
+                output.writeMessage(1, getFiberUuid());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (fiberUuid_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getFiberUuid());
+            }
+            size += getUnknownFields().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.FiberId)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.FiberId other = (context.ContextOuterClass.FiberId) obj;
+            if (hasFiberUuid() != other.hasFiberUuid())
+                return false;
+            if (hasFiberUuid()) {
+                if (!getFiberUuid().equals(other.getFiberUuid()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasFiberUuid()) {
+                hash = (37 * hash) + FIBER_UUID_FIELD_NUMBER;
+                hash = (53 * hash) + getFiberUuid().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.FiberId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.FiberId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.FiberId 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.FiberId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.FiberId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.FiberId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.FiberId 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.FiberId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.FiberId 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.FiberId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.FiberId 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.FiberId 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.FiberId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.FiberId)
+        context.ContextOuterClass.FiberIdOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_FiberId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.FiberId.class, context.ContextOuterClass.FiberId.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.FiberId.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                fiberUuid_ = null;
+                if (fiberUuidBuilder_ != null) {
+                    fiberUuidBuilder_.dispose();
+                    fiberUuidBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.FiberId getDefaultInstanceForType() {
+                return context.ContextOuterClass.FiberId.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.FiberId build() {
+                context.ContextOuterClass.FiberId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.FiberId buildPartial() {
+                context.ContextOuterClass.FiberId result = new context.ContextOuterClass.FiberId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.FiberId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.fiberUuid_ = fiberUuidBuilder_ == null ? fiberUuid_ : fiberUuidBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.FiberId) {
+                    return mergeFrom((context.ContextOuterClass.FiberId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.FiberId other) {
+                if (other == context.ContextOuterClass.FiberId.getDefaultInstance())
+                    return this;
+                if (other.hasFiberUuid()) {
+                    mergeFiberUuid(other.getFiberUuid());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getFiberUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.Uuid fiberUuid_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> fiberUuidBuilder_;
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * @return Whether the fiberUuid field is set.
+             */
+            public boolean hasFiberUuid() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * @return The fiberUuid.
+             */
+            public context.ContextOuterClass.Uuid getFiberUuid() {
+                if (fiberUuidBuilder_ == null) {
+                    return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+                } else {
+                    return fiberUuidBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            public Builder setFiberUuid(context.ContextOuterClass.Uuid value) {
+                if (fiberUuidBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    fiberUuid_ = value;
+                } else {
+                    fiberUuidBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            public Builder setFiberUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
+                if (fiberUuidBuilder_ == null) {
+                    fiberUuid_ = builderForValue.build();
+                } else {
+                    fiberUuidBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            public Builder mergeFiberUuid(context.ContextOuterClass.Uuid value) {
+                if (fiberUuidBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && fiberUuid_ != null && fiberUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getFiberUuidBuilder().mergeFrom(value);
+                    } else {
+                        fiberUuid_ = value;
+                    }
+                } else {
+                    fiberUuidBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            public Builder clearFiberUuid() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                fiberUuid_ = null;
+                if (fiberUuidBuilder_ != null) {
+                    fiberUuidBuilder_.dispose();
+                    fiberUuidBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            public context.ContextOuterClass.Uuid.Builder getFiberUuidBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getFiberUuidFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            public context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder() {
+                if (fiberUuidBuilder_ != null) {
+                    return fiberUuidBuilder_.getMessageOrBuilder();
+                } else {
+                    return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+                }
+            }
+
+            /**
+             * <code>.context.Uuid fiber_uuid = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getFiberUuidFieldBuilder() {
+                if (fiberUuidBuilder_ == null) {
+                    fiberUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getFiberUuid(), getParentForChildren(), isClean());
+                    fiberUuid_ = null;
+                }
+                return fiberUuidBuilder_;
+            }
+
+            @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.FiberId)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.FiberId)
+        private static final context.ContextOuterClass.FiberId DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.FiberId();
+        }
+
+        public static context.ContextOuterClass.FiberId getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<FiberId> PARSER = new com.google.protobuf.AbstractParser<FiberId>() {
+
+            @java.lang.Override
+            public FiberId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<FiberId> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<FiberId> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.FiberId getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface FiberOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Fiber)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>string ID = 10;</code>
+         * @return The iD.
+         */
+        java.lang.String getID();
+
+        /**
+         * <code>string ID = 10;</code>
+         * @return The bytes for iD.
+         */
+        com.google.protobuf.ByteString getIDBytes();
+
+        /**
+         * <code>string src_port = 1;</code>
+         * @return The srcPort.
+         */
+        java.lang.String getSrcPort();
+
+        /**
+         * <code>string src_port = 1;</code>
+         * @return The bytes for srcPort.
+         */
+        com.google.protobuf.ByteString getSrcPortBytes();
+
+        /**
+         * <code>string dst_port = 2;</code>
+         * @return The dstPort.
+         */
+        java.lang.String getDstPort();
+
+        /**
+         * <code>string dst_port = 2;</code>
+         * @return The bytes for dstPort.
+         */
+        com.google.protobuf.ByteString getDstPortBytes();
+
+        /**
+         * <code>string local_peer_port = 3;</code>
+         * @return The localPeerPort.
+         */
+        java.lang.String getLocalPeerPort();
+
+        /**
+         * <code>string local_peer_port = 3;</code>
+         * @return The bytes for localPeerPort.
+         */
+        com.google.protobuf.ByteString getLocalPeerPortBytes();
+
+        /**
+         * <code>string remote_peer_port = 4;</code>
+         * @return The remotePeerPort.
+         */
+        java.lang.String getRemotePeerPort();
+
+        /**
+         * <code>string remote_peer_port = 4;</code>
+         * @return The bytes for remotePeerPort.
+         */
+        com.google.protobuf.ByteString getRemotePeerPortBytes();
+
+        /**
+         * <code>repeated int32 c_slots = 5;</code>
+         * @return A list containing the cSlots.
+         */
+        java.util.List<java.lang.Integer> getCSlotsList();
+
+        /**
+         * <code>repeated int32 c_slots = 5;</code>
+         * @return The count of cSlots.
+         */
+        int getCSlotsCount();
+
+        /**
+         * <code>repeated int32 c_slots = 5;</code>
+         * @param index The index of the element to return.
+         * @return The cSlots at the given index.
+         */
+        int getCSlots(int index);
+
+        /**
+         * <code>repeated int32 l_slots = 6;</code>
+         * @return A list containing the lSlots.
+         */
+        java.util.List<java.lang.Integer> getLSlotsList();
+
+        /**
+         * <code>repeated int32 l_slots = 6;</code>
+         * @return The count of lSlots.
+         */
+        int getLSlotsCount();
+
+        /**
+         * <code>repeated int32 l_slots = 6;</code>
+         * @param index The index of the element to return.
+         * @return The lSlots at the given index.
+         */
+        int getLSlots(int index);
+
+        /**
+         * <code>repeated int32 s_slots = 7;</code>
+         * @return A list containing the sSlots.
+         */
+        java.util.List<java.lang.Integer> getSSlotsList();
+
+        /**
+         * <code>repeated int32 s_slots = 7;</code>
+         * @return The count of sSlots.
+         */
+        int getSSlotsCount();
+
+        /**
+         * <code>repeated int32 s_slots = 7;</code>
+         * @param index The index of the element to return.
+         * @return The sSlots at the given index.
+         */
+        int getSSlots(int index);
+
+        /**
+         * <code>float length = 8;</code>
+         * @return The length.
+         */
+        float getLength();
+
+        /**
+         * <code>bool used = 9;</code>
+         * @return The used.
+         */
+        boolean getUsed();
+
+        /**
+         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * @return Whether the fiberUuid field is set.
+         */
+        boolean hasFiberUuid();
+
+        /**
+         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * @return The fiberUuid.
+         */
+        context.ContextOuterClass.FiberId getFiberUuid();
+
+        /**
+         * <code>.context.FiberId fiber_uuid = 11;</code>
+         */
+        context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.Fiber}
+     */
+    public static final class Fiber extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.Fiber)
+    FiberOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use Fiber.newBuilder() to construct.
+        private Fiber(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private Fiber() {
+            iD_ = "";
+            srcPort_ = "";
+            dstPort_ = "";
+            localPeerPort_ = "";
+            remotePeerPort_ = "";
+            cSlots_ = emptyIntList();
+            lSlots_ = emptyIntList();
+            sSlots_ = emptyIntList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new Fiber();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_Fiber_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Fiber.class, context.ContextOuterClass.Fiber.Builder.class);
+        }
+
+        public static final int ID_FIELD_NUMBER = 10;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object iD_ = "";
+
+        /**
+         * <code>string ID = 10;</code>
+         * @return The iD.
+         */
+        @java.lang.Override
+        public java.lang.String getID() {
+            java.lang.Object ref = iD_;
+            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();
+                iD_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string ID = 10;</code>
+         * @return The bytes for iD.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getIDBytes() {
+            java.lang.Object ref = iD_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                iD_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int SRC_PORT_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object srcPort_ = "";
+
+        /**
+         * <code>string src_port = 1;</code>
+         * @return The srcPort.
+         */
+        @java.lang.Override
+        public java.lang.String getSrcPort() {
+            java.lang.Object ref = srcPort_;
+            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();
+                srcPort_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string src_port = 1;</code>
+         * @return The bytes for srcPort.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getSrcPortBytes() {
+            java.lang.Object ref = srcPort_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                srcPort_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int DST_PORT_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object dstPort_ = "";
+
+        /**
+         * <code>string dst_port = 2;</code>
+         * @return The dstPort.
+         */
+        @java.lang.Override
+        public java.lang.String getDstPort() {
+            java.lang.Object ref = dstPort_;
+            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();
+                dstPort_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string dst_port = 2;</code>
+         * @return The bytes for dstPort.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getDstPortBytes() {
+            java.lang.Object ref = dstPort_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                dstPort_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int LOCAL_PEER_PORT_FIELD_NUMBER = 3;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object localPeerPort_ = "";
+
+        /**
+         * <code>string local_peer_port = 3;</code>
+         * @return The localPeerPort.
+         */
+        @java.lang.Override
+        public java.lang.String getLocalPeerPort() {
+            java.lang.Object ref = localPeerPort_;
+            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();
+                localPeerPort_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string local_peer_port = 3;</code>
+         * @return The bytes for localPeerPort.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getLocalPeerPortBytes() {
+            java.lang.Object ref = localPeerPort_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                localPeerPort_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int REMOTE_PEER_PORT_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object remotePeerPort_ = "";
+
+        /**
+         * <code>string remote_peer_port = 4;</code>
+         * @return The remotePeerPort.
+         */
+        @java.lang.Override
+        public java.lang.String getRemotePeerPort() {
+            java.lang.Object ref = remotePeerPort_;
+            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();
+                remotePeerPort_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string remote_peer_port = 4;</code>
+         * @return The bytes for remotePeerPort.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getRemotePeerPortBytes() {
+            java.lang.Object ref = remotePeerPort_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                remotePeerPort_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int C_SLOTS_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private com.google.protobuf.Internal.IntList cSlots_;
+
+        /**
+         * <code>repeated int32 c_slots = 5;</code>
+         * @return A list containing the cSlots.
+         */
+        @java.lang.Override
+        public java.util.List<java.lang.Integer> getCSlotsList() {
+            return cSlots_;
+        }
+
+        /**
+         * <code>repeated int32 c_slots = 5;</code>
+         * @return The count of cSlots.
+         */
+        public int getCSlotsCount() {
+            return cSlots_.size();
+        }
+
+        /**
+         * <code>repeated int32 c_slots = 5;</code>
+         * @param index The index of the element to return.
+         * @return The cSlots at the given index.
+         */
+        public int getCSlots(int index) {
+            return cSlots_.getInt(index);
+        }
+
+        private int cSlotsMemoizedSerializedSize = -1;
+
+        public static final int L_SLOTS_FIELD_NUMBER = 6;
+
+        @SuppressWarnings("serial")
+        private com.google.protobuf.Internal.IntList lSlots_;
+
+        /**
+         * <code>repeated int32 l_slots = 6;</code>
+         * @return A list containing the lSlots.
+         */
+        @java.lang.Override
+        public java.util.List<java.lang.Integer> getLSlotsList() {
+            return lSlots_;
+        }
+
+        /**
+         * <code>repeated int32 l_slots = 6;</code>
+         * @return The count of lSlots.
+         */
+        public int getLSlotsCount() {
+            return lSlots_.size();
+        }
+
+        /**
+         * <code>repeated int32 l_slots = 6;</code>
+         * @param index The index of the element to return.
+         * @return The lSlots at the given index.
+         */
+        public int getLSlots(int index) {
+            return lSlots_.getInt(index);
+        }
+
+        private int lSlotsMemoizedSerializedSize = -1;
+
+        public static final int S_SLOTS_FIELD_NUMBER = 7;
+
+        @SuppressWarnings("serial")
+        private com.google.protobuf.Internal.IntList sSlots_;
+
+        /**
+         * <code>repeated int32 s_slots = 7;</code>
+         * @return A list containing the sSlots.
+         */
+        @java.lang.Override
+        public java.util.List<java.lang.Integer> getSSlotsList() {
+            return sSlots_;
+        }
+
+        /**
+         * <code>repeated int32 s_slots = 7;</code>
+         * @return The count of sSlots.
+         */
+        public int getSSlotsCount() {
+            return sSlots_.size();
+        }
+
+        /**
+         * <code>repeated int32 s_slots = 7;</code>
+         * @param index The index of the element to return.
+         * @return The sSlots at the given index.
+         */
+        public int getSSlots(int index) {
+            return sSlots_.getInt(index);
+        }
+
+        private int sSlotsMemoizedSerializedSize = -1;
+
+        public static final int LENGTH_FIELD_NUMBER = 8;
+
+        private float length_ = 0F;
+
+        /**
+         * <code>float length = 8;</code>
+         * @return The length.
+         */
+        @java.lang.Override
+        public float getLength() {
+            return length_;
+        }
+
+        public static final int USED_FIELD_NUMBER = 9;
+
+        private boolean used_ = false;
+
+        /**
+         * <code>bool used = 9;</code>
+         * @return The used.
+         */
+        @java.lang.Override
+        public boolean getUsed() {
+            return used_;
+        }
+
+        public static final int FIBER_UUID_FIELD_NUMBER = 11;
+
+        private context.ContextOuterClass.FiberId fiberUuid_;
+
+        /**
+         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * @return Whether the fiberUuid field is set.
+         */
+        @java.lang.Override
+        public boolean hasFiberUuid() {
+            return fiberUuid_ != null;
+        }
+
+        /**
+         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * @return The fiberUuid.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.FiberId getFiberUuid() {
+            return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+        }
+
+        /**
+         * <code>.context.FiberId fiber_uuid = 11;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder() {
+            return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+        }
+
+        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 {
+            getSerializedSize();
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcPort_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstPort_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(localPeerPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, localPeerPort_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(remotePeerPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, remotePeerPort_);
+            }
+            if (getCSlotsList().size() > 0) {
+                output.writeUInt32NoTag(42);
+                output.writeUInt32NoTag(cSlotsMemoizedSerializedSize);
+            }
+            for (int i = 0; i < cSlots_.size(); i++) {
+                output.writeInt32NoTag(cSlots_.getInt(i));
+            }
+            if (getLSlotsList().size() > 0) {
+                output.writeUInt32NoTag(50);
+                output.writeUInt32NoTag(lSlotsMemoizedSerializedSize);
+            }
+            for (int i = 0; i < lSlots_.size(); i++) {
+                output.writeInt32NoTag(lSlots_.getInt(i));
+            }
+            if (getSSlotsList().size() > 0) {
+                output.writeUInt32NoTag(58);
+                output.writeUInt32NoTag(sSlotsMemoizedSerializedSize);
+            }
+            for (int i = 0; i < sSlots_.size(); i++) {
+                output.writeInt32NoTag(sSlots_.getInt(i));
+            }
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                output.writeFloat(8, length_);
+            }
+            if (used_ != false) {
+                output.writeBool(9, used_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(iD_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 10, iD_);
+            }
+            if (fiberUuid_ != null) {
+                output.writeMessage(11, getFiberUuid());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcPort_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstPort_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(localPeerPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, localPeerPort_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(remotePeerPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, remotePeerPort_);
+            }
+            {
+                int dataSize = 0;
+                for (int i = 0; i < cSlots_.size(); i++) {
+                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(cSlots_.getInt(i));
+                }
+                size += dataSize;
+                if (!getCSlotsList().isEmpty()) {
+                    size += 1;
+                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
+                }
+                cSlotsMemoizedSerializedSize = dataSize;
+            }
+            {
+                int dataSize = 0;
+                for (int i = 0; i < lSlots_.size(); i++) {
+                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(lSlots_.getInt(i));
+                }
+                size += dataSize;
+                if (!getLSlotsList().isEmpty()) {
+                    size += 1;
+                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
+                }
+                lSlotsMemoizedSerializedSize = dataSize;
+            }
+            {
+                int dataSize = 0;
+                for (int i = 0; i < sSlots_.size(); i++) {
+                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(sSlots_.getInt(i));
+                }
+                size += dataSize;
+                if (!getSSlotsList().isEmpty()) {
+                    size += 1;
+                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
+                }
+                sSlotsMemoizedSerializedSize = dataSize;
+            }
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeFloatSize(8, length_);
+            }
+            if (used_ != false) {
+                size += com.google.protobuf.CodedOutputStream.computeBoolSize(9, used_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(iD_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, iD_);
+            }
+            if (fiberUuid_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getFiberUuid());
+            }
+            size += getUnknownFields().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.Fiber)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.Fiber other = (context.ContextOuterClass.Fiber) obj;
+            if (!getID().equals(other.getID()))
+                return false;
+            if (!getSrcPort().equals(other.getSrcPort()))
+                return false;
+            if (!getDstPort().equals(other.getDstPort()))
+                return false;
+            if (!getLocalPeerPort().equals(other.getLocalPeerPort()))
+                return false;
+            if (!getRemotePeerPort().equals(other.getRemotePeerPort()))
+                return false;
+            if (!getCSlotsList().equals(other.getCSlotsList()))
+                return false;
+            if (!getLSlotsList().equals(other.getLSlotsList()))
+                return false;
+            if (!getSSlotsList().equals(other.getSSlotsList()))
+                return false;
+            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
+                return false;
+            if (getUsed() != other.getUsed())
+                return false;
+            if (hasFiberUuid() != other.hasFiberUuid())
+                return false;
+            if (hasFiberUuid()) {
+                if (!getFiberUuid().equals(other.getFiberUuid()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + ID_FIELD_NUMBER;
+            hash = (53 * hash) + getID().hashCode();
+            hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+            hash = (53 * hash) + getSrcPort().hashCode();
+            hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+            hash = (53 * hash) + getDstPort().hashCode();
+            hash = (37 * hash) + LOCAL_PEER_PORT_FIELD_NUMBER;
+            hash = (53 * hash) + getLocalPeerPort().hashCode();
+            hash = (37 * hash) + REMOTE_PEER_PORT_FIELD_NUMBER;
+            hash = (53 * hash) + getRemotePeerPort().hashCode();
+            if (getCSlotsCount() > 0) {
+                hash = (37 * hash) + C_SLOTS_FIELD_NUMBER;
+                hash = (53 * hash) + getCSlotsList().hashCode();
+            }
+            if (getLSlotsCount() > 0) {
+                hash = (37 * hash) + L_SLOTS_FIELD_NUMBER;
+                hash = (53 * hash) + getLSlotsList().hashCode();
+            }
+            if (getSSlotsCount() > 0) {
+                hash = (37 * hash) + S_SLOTS_FIELD_NUMBER;
+                hash = (53 * hash) + getSSlotsList().hashCode();
+            }
+            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
+            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
+            hash = (37 * hash) + USED_FIELD_NUMBER;
+            hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUsed());
+            if (hasFiberUuid()) {
+                hash = (37 * hash) + FIBER_UUID_FIELD_NUMBER;
+                hash = (53 * hash) + getFiberUuid().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.Fiber parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.Fiber parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.Fiber 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.Fiber parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.Fiber parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.Fiber parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.Fiber 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.Fiber parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.Fiber 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.Fiber parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.Fiber 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.Fiber 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.Fiber}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.Fiber)
+        context.ContextOuterClass.FiberOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_Fiber_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Fiber.class, context.ContextOuterClass.Fiber.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.Fiber.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                iD_ = "";
+                srcPort_ = "";
+                dstPort_ = "";
+                localPeerPort_ = "";
+                remotePeerPort_ = "";
+                cSlots_ = emptyIntList();
+                lSlots_ = emptyIntList();
+                sSlots_ = emptyIntList();
+                length_ = 0F;
+                used_ = false;
+                fiberUuid_ = null;
+                if (fiberUuidBuilder_ != null) {
+                    fiberUuidBuilder_.dispose();
+                    fiberUuidBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.Fiber getDefaultInstanceForType() {
+                return context.ContextOuterClass.Fiber.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.Fiber build() {
+                context.ContextOuterClass.Fiber result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.Fiber buildPartial() {
+                context.ContextOuterClass.Fiber result = new context.ContextOuterClass.Fiber(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Fiber result) {
+                if (((bitField0_ & 0x00000020) != 0)) {
+                    cSlots_.makeImmutable();
+                    bitField0_ = (bitField0_ & ~0x00000020);
+                }
+                result.cSlots_ = cSlots_;
+                if (((bitField0_ & 0x00000040) != 0)) {
+                    lSlots_.makeImmutable();
+                    bitField0_ = (bitField0_ & ~0x00000040);
+                }
+                result.lSlots_ = lSlots_;
+                if (((bitField0_ & 0x00000080) != 0)) {
+                    sSlots_.makeImmutable();
+                    bitField0_ = (bitField0_ & ~0x00000080);
+                }
+                result.sSlots_ = sSlots_;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.Fiber result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.iD_ = iD_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.srcPort_ = srcPort_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.dstPort_ = dstPort_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.localPeerPort_ = localPeerPort_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.remotePeerPort_ = remotePeerPort_;
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.length_ = length_;
+                }
+                if (((from_bitField0_ & 0x00000200) != 0)) {
+                    result.used_ = used_;
+                }
+                if (((from_bitField0_ & 0x00000400) != 0)) {
+                    result.fiberUuid_ = fiberUuidBuilder_ == null ? fiberUuid_ : fiberUuidBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.Fiber) {
+                    return mergeFrom((context.ContextOuterClass.Fiber) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.Fiber other) {
+                if (other == context.ContextOuterClass.Fiber.getDefaultInstance())
+                    return this;
+                if (!other.getID().isEmpty()) {
+                    iD_ = other.iD_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                if (!other.getSrcPort().isEmpty()) {
+                    srcPort_ = other.srcPort_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                if (!other.getDstPort().isEmpty()) {
+                    dstPort_ = other.dstPort_;
+                    bitField0_ |= 0x00000004;
+                    onChanged();
+                }
+                if (!other.getLocalPeerPort().isEmpty()) {
+                    localPeerPort_ = other.localPeerPort_;
+                    bitField0_ |= 0x00000008;
+                    onChanged();
+                }
+                if (!other.getRemotePeerPort().isEmpty()) {
+                    remotePeerPort_ = other.remotePeerPort_;
+                    bitField0_ |= 0x00000010;
+                    onChanged();
+                }
+                if (!other.cSlots_.isEmpty()) {
+                    if (cSlots_.isEmpty()) {
+                        cSlots_ = other.cSlots_;
+                        bitField0_ = (bitField0_ & ~0x00000020);
+                    } else {
+                        ensureCSlotsIsMutable();
+                        cSlots_.addAll(other.cSlots_);
+                    }
+                    onChanged();
+                }
+                if (!other.lSlots_.isEmpty()) {
+                    if (lSlots_.isEmpty()) {
+                        lSlots_ = other.lSlots_;
+                        bitField0_ = (bitField0_ & ~0x00000040);
+                    } else {
+                        ensureLSlotsIsMutable();
+                        lSlots_.addAll(other.lSlots_);
+                    }
+                    onChanged();
+                }
+                if (!other.sSlots_.isEmpty()) {
+                    if (sSlots_.isEmpty()) {
+                        sSlots_ = other.sSlots_;
+                        bitField0_ = (bitField0_ & ~0x00000080);
+                    } else {
+                        ensureSSlotsIsMutable();
+                        sSlots_.addAll(other.sSlots_);
+                    }
+                    onChanged();
+                }
+                if (other.getLength() != 0F) {
+                    setLength(other.getLength());
+                }
+                if (other.getUsed() != false) {
+                    setUsed(other.getUsed());
+                }
+                if (other.hasFiberUuid()) {
+                    mergeFiberUuid(other.getFiberUuid());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    srcPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    dstPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    localPeerPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    remotePeerPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 34
+                            case 40:
+                                {
+                                    int v = input.readInt32();
+                                    ensureCSlotsIsMutable();
+                                    cSlots_.addInt(v);
+                                    break;
+                                }
+                            // case 40
+                            case 42:
+                                {
+                                    int length = input.readRawVarint32();
+                                    int limit = input.pushLimit(length);
+                                    ensureCSlotsIsMutable();
+                                    while (input.getBytesUntilLimit() > 0) {
+                                        cSlots_.addInt(input.readInt32());
+                                    }
+                                    input.popLimit(limit);
+                                    break;
+                                }
+                            // case 42
+                            case 48:
+                                {
+                                    int v = input.readInt32();
+                                    ensureLSlotsIsMutable();
+                                    lSlots_.addInt(v);
+                                    break;
+                                }
+                            // case 48
+                            case 50:
+                                {
+                                    int length = input.readRawVarint32();
+                                    int limit = input.pushLimit(length);
+                                    ensureLSlotsIsMutable();
+                                    while (input.getBytesUntilLimit() > 0) {
+                                        lSlots_.addInt(input.readInt32());
+                                    }
+                                    input.popLimit(limit);
+                                    break;
+                                }
+                            // case 50
+                            case 56:
+                                {
+                                    int v = input.readInt32();
+                                    ensureSSlotsIsMutable();
+                                    sSlots_.addInt(v);
+                                    break;
+                                }
+                            // case 56
+                            case 58:
+                                {
+                                    int length = input.readRawVarint32();
+                                    int limit = input.pushLimit(length);
+                                    ensureSSlotsIsMutable();
+                                    while (input.getBytesUntilLimit() > 0) {
+                                        sSlots_.addInt(input.readInt32());
+                                    }
+                                    input.popLimit(limit);
+                                    break;
+                                }
+                            // case 58
+                            case 69:
+                                {
+                                    length_ = input.readFloat();
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 69
+                            case 72:
+                                {
+                                    used_ = input.readBool();
+                                    bitField0_ |= 0x00000200;
+                                    break;
+                                }
+                            // case 72
+                            case 82:
+                                {
+                                    iD_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 82
+                            case 90:
+                                {
+                                    input.readMessage(getFiberUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000400;
+                                    break;
+                                }
+                            // case 90
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object iD_ = "";
+
+            /**
+             * <code>string ID = 10;</code>
+             * @return The iD.
+             */
+            public java.lang.String getID() {
+                java.lang.Object ref = iD_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    iD_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string ID = 10;</code>
+             * @return The bytes for iD.
+             */
+            public com.google.protobuf.ByteString getIDBytes() {
+                java.lang.Object ref = iD_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    iD_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string ID = 10;</code>
+             * @param value The iD to set.
+             * @return This builder for chaining.
+             */
+            public Builder setID(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                iD_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string ID = 10;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearID() {
+                iD_ = getDefaultInstance().getID();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string ID = 10;</code>
+             * @param value The bytes for iD to set.
+             * @return This builder for chaining.
+             */
+            public Builder setIDBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                iD_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object srcPort_ = "";
+
+            /**
+             * <code>string src_port = 1;</code>
+             * @return The srcPort.
+             */
+            public java.lang.String getSrcPort() {
+                java.lang.Object ref = srcPort_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    srcPort_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string src_port = 1;</code>
+             * @return The bytes for srcPort.
+             */
+            public com.google.protobuf.ByteString getSrcPortBytes() {
+                java.lang.Object ref = srcPort_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    srcPort_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string src_port = 1;</code>
+             * @param value The srcPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setSrcPort(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                srcPort_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string src_port = 1;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearSrcPort() {
+                srcPort_ = getDefaultInstance().getSrcPort();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string src_port = 1;</code>
+             * @param value The bytes for srcPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setSrcPortBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                srcPort_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object dstPort_ = "";
+
+            /**
+             * <code>string dst_port = 2;</code>
+             * @return The dstPort.
+             */
+            public java.lang.String getDstPort() {
+                java.lang.Object ref = dstPort_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    dstPort_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string dst_port = 2;</code>
+             * @return The bytes for dstPort.
+             */
+            public com.google.protobuf.ByteString getDstPortBytes() {
+                java.lang.Object ref = dstPort_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    dstPort_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string dst_port = 2;</code>
+             * @param value The dstPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDstPort(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                dstPort_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string dst_port = 2;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearDstPort() {
+                dstPort_ = getDefaultInstance().getDstPort();
+                bitField0_ = (bitField0_ & ~0x00000004);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string dst_port = 2;</code>
+             * @param value The bytes for dstPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDstPortBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                dstPort_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object localPeerPort_ = "";
+
+            /**
+             * <code>string local_peer_port = 3;</code>
+             * @return The localPeerPort.
+             */
+            public java.lang.String getLocalPeerPort() {
+                java.lang.Object ref = localPeerPort_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    localPeerPort_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string local_peer_port = 3;</code>
+             * @return The bytes for localPeerPort.
+             */
+            public com.google.protobuf.ByteString getLocalPeerPortBytes() {
+                java.lang.Object ref = localPeerPort_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    localPeerPort_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string local_peer_port = 3;</code>
+             * @param value The localPeerPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLocalPeerPort(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                localPeerPort_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string local_peer_port = 3;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearLocalPeerPort() {
+                localPeerPort_ = getDefaultInstance().getLocalPeerPort();
+                bitField0_ = (bitField0_ & ~0x00000008);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string local_peer_port = 3;</code>
+             * @param value The bytes for localPeerPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLocalPeerPortBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                localPeerPort_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object remotePeerPort_ = "";
+
+            /**
+             * <code>string remote_peer_port = 4;</code>
+             * @return The remotePeerPort.
+             */
+            public java.lang.String getRemotePeerPort() {
+                java.lang.Object ref = remotePeerPort_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    remotePeerPort_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string remote_peer_port = 4;</code>
+             * @return The bytes for remotePeerPort.
+             */
+            public com.google.protobuf.ByteString getRemotePeerPortBytes() {
+                java.lang.Object ref = remotePeerPort_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    remotePeerPort_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string remote_peer_port = 4;</code>
+             * @param value The remotePeerPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setRemotePeerPort(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                remotePeerPort_ = value;
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string remote_peer_port = 4;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearRemotePeerPort() {
+                remotePeerPort_ = getDefaultInstance().getRemotePeerPort();
+                bitField0_ = (bitField0_ & ~0x00000010);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string remote_peer_port = 4;</code>
+             * @param value The bytes for remotePeerPort to set.
+             * @return This builder for chaining.
+             */
+            public Builder setRemotePeerPortBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                remotePeerPort_ = value;
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            private com.google.protobuf.Internal.IntList cSlots_ = emptyIntList();
+
+            private void ensureCSlotsIsMutable() {
+                if (!((bitField0_ & 0x00000020) != 0)) {
+                    cSlots_ = mutableCopy(cSlots_);
+                    bitField0_ |= 0x00000020;
+                }
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @return A list containing the cSlots.
+             */
+            public java.util.List<java.lang.Integer> getCSlotsList() {
+                return ((bitField0_ & 0x00000020) != 0) ? java.util.Collections.unmodifiableList(cSlots_) : cSlots_;
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @return The count of cSlots.
+             */
+            public int getCSlotsCount() {
+                return cSlots_.size();
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @param index The index of the element to return.
+             * @return The cSlots at the given index.
+             */
+            public int getCSlots(int index) {
+                return cSlots_.getInt(index);
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @param index The index to set the value at.
+             * @param value The cSlots to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCSlots(int index, int value) {
+                ensureCSlotsIsMutable();
+                cSlots_.setInt(index, value);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @param value The cSlots to add.
+             * @return This builder for chaining.
+             */
+            public Builder addCSlots(int value) {
+                ensureCSlotsIsMutable();
+                cSlots_.addInt(value);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @param values The cSlots to add.
+             * @return This builder for chaining.
+             */
+            public Builder addAllCSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
+                ensureCSlotsIsMutable();
+                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, cSlots_);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 c_slots = 5;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearCSlots() {
+                cSlots_ = emptyIntList();
+                bitField0_ = (bitField0_ & ~0x00000020);
+                onChanged();
+                return this;
+            }
+
+            private com.google.protobuf.Internal.IntList lSlots_ = emptyIntList();
+
+            private void ensureLSlotsIsMutable() {
+                if (!((bitField0_ & 0x00000040) != 0)) {
+                    lSlots_ = mutableCopy(lSlots_);
+                    bitField0_ |= 0x00000040;
+                }
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @return A list containing the lSlots.
+             */
+            public java.util.List<java.lang.Integer> getLSlotsList() {
+                return ((bitField0_ & 0x00000040) != 0) ? java.util.Collections.unmodifiableList(lSlots_) : lSlots_;
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @return The count of lSlots.
+             */
+            public int getLSlotsCount() {
+                return lSlots_.size();
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @param index The index of the element to return.
+             * @return The lSlots at the given index.
+             */
+            public int getLSlots(int index) {
+                return lSlots_.getInt(index);
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @param index The index to set the value at.
+             * @param value The lSlots to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLSlots(int index, int value) {
+                ensureLSlotsIsMutable();
+                lSlots_.setInt(index, value);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @param value The lSlots to add.
+             * @return This builder for chaining.
+             */
+            public Builder addLSlots(int value) {
+                ensureLSlotsIsMutable();
+                lSlots_.addInt(value);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @param values The lSlots to add.
+             * @return This builder for chaining.
+             */
+            public Builder addAllLSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
+                ensureLSlotsIsMutable();
+                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, lSlots_);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 l_slots = 6;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearLSlots() {
+                lSlots_ = emptyIntList();
+                bitField0_ = (bitField0_ & ~0x00000040);
+                onChanged();
+                return this;
+            }
+
+            private com.google.protobuf.Internal.IntList sSlots_ = emptyIntList();
+
+            private void ensureSSlotsIsMutable() {
+                if (!((bitField0_ & 0x00000080) != 0)) {
+                    sSlots_ = mutableCopy(sSlots_);
+                    bitField0_ |= 0x00000080;
+                }
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @return A list containing the sSlots.
+             */
+            public java.util.List<java.lang.Integer> getSSlotsList() {
+                return ((bitField0_ & 0x00000080) != 0) ? java.util.Collections.unmodifiableList(sSlots_) : sSlots_;
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @return The count of sSlots.
+             */
+            public int getSSlotsCount() {
+                return sSlots_.size();
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @param index The index of the element to return.
+             * @return The sSlots at the given index.
+             */
+            public int getSSlots(int index) {
+                return sSlots_.getInt(index);
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @param index The index to set the value at.
+             * @param value The sSlots to set.
+             * @return This builder for chaining.
+             */
+            public Builder setSSlots(int index, int value) {
+                ensureSSlotsIsMutable();
+                sSlots_.setInt(index, value);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @param value The sSlots to add.
+             * @return This builder for chaining.
+             */
+            public Builder addSSlots(int value) {
+                ensureSSlotsIsMutable();
+                sSlots_.addInt(value);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @param values The sSlots to add.
+             * @return This builder for chaining.
+             */
+            public Builder addAllSSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
+                ensureSSlotsIsMutable();
+                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, sSlots_);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>repeated int32 s_slots = 7;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearSSlots() {
+                sSlots_ = emptyIntList();
+                bitField0_ = (bitField0_ & ~0x00000080);
+                onChanged();
+                return this;
+            }
+
+            private float length_;
+
+            /**
+             * <code>float length = 8;</code>
+             * @return The length.
+             */
+            @java.lang.Override
+            public float getLength() {
+                return length_;
+            }
+
+            /**
+             * <code>float length = 8;</code>
+             * @param value The length to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLength(float value) {
+                length_ = value;
+                bitField0_ |= 0x00000100;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>float length = 8;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearLength() {
+                bitField0_ = (bitField0_ & ~0x00000100);
+                length_ = 0F;
+                onChanged();
+                return this;
+            }
+
+            private boolean used_;
+
+            /**
+             * <code>bool used = 9;</code>
+             * @return The used.
+             */
+            @java.lang.Override
+            public boolean getUsed() {
+                return used_;
+            }
+
+            /**
+             * <code>bool used = 9;</code>
+             * @param value The used to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUsed(boolean value) {
+                used_ = value;
+                bitField0_ |= 0x00000200;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>bool used = 9;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearUsed() {
+                bitField0_ = (bitField0_ & ~0x00000200);
+                used_ = false;
+                onChanged();
+                return this;
+            }
+
+            private context.ContextOuterClass.FiberId fiberUuid_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder> fiberUuidBuilder_;
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * @return Whether the fiberUuid field is set.
+             */
+            public boolean hasFiberUuid() {
+                return ((bitField0_ & 0x00000400) != 0);
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * @return The fiberUuid.
+             */
+            public context.ContextOuterClass.FiberId getFiberUuid() {
+                if (fiberUuidBuilder_ == null) {
+                    return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+                } else {
+                    return fiberUuidBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            public Builder setFiberUuid(context.ContextOuterClass.FiberId value) {
+                if (fiberUuidBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    fiberUuid_ = value;
+                } else {
+                    fiberUuidBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000400;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            public Builder setFiberUuid(context.ContextOuterClass.FiberId.Builder builderForValue) {
+                if (fiberUuidBuilder_ == null) {
+                    fiberUuid_ = builderForValue.build();
+                } else {
+                    fiberUuidBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000400;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            public Builder mergeFiberUuid(context.ContextOuterClass.FiberId value) {
+                if (fiberUuidBuilder_ == null) {
+                    if (((bitField0_ & 0x00000400) != 0) && fiberUuid_ != null && fiberUuid_ != context.ContextOuterClass.FiberId.getDefaultInstance()) {
+                        getFiberUuidBuilder().mergeFrom(value);
+                    } else {
+                        fiberUuid_ = value;
+                    }
+                } else {
+                    fiberUuidBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000400;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            public Builder clearFiberUuid() {
+                bitField0_ = (bitField0_ & ~0x00000400);
+                fiberUuid_ = null;
+                if (fiberUuidBuilder_ != null) {
+                    fiberUuidBuilder_.dispose();
+                    fiberUuidBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            public context.ContextOuterClass.FiberId.Builder getFiberUuidBuilder() {
+                bitField0_ |= 0x00000400;
+                onChanged();
+                return getFiberUuidFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            public context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder() {
+                if (fiberUuidBuilder_ != null) {
+                    return fiberUuidBuilder_.getMessageOrBuilder();
+                } else {
+                    return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+                }
+            }
+
+            /**
+             * <code>.context.FiberId fiber_uuid = 11;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder> getFiberUuidFieldBuilder() {
+                if (fiberUuidBuilder_ == null) {
+                    fiberUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder>(getFiberUuid(), getParentForChildren(), isClean());
+                    fiberUuid_ = null;
+                }
+                return fiberUuidBuilder_;
+            }
+
+            @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.Fiber)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.Fiber)
+        private static final context.ContextOuterClass.Fiber DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.Fiber();
+        }
+
+        public static context.ContextOuterClass.Fiber getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<Fiber> PARSER = new com.google.protobuf.AbstractParser<Fiber>() {
+
+            @java.lang.Override
+            public Fiber parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<Fiber> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<Fiber> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.Fiber getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface OpticalLinkDetailsOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkDetails)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>float length = 1;</code>
+         * @return The length.
+         */
+        float getLength();
+
+        /**
+         * <code>string source = 2;</code>
+         * @return The source.
+         */
+        java.lang.String getSource();
+
+        /**
+         * <code>string source = 2;</code>
+         * @return The bytes for source.
+         */
+        com.google.protobuf.ByteString getSourceBytes();
+
+        /**
+         * <code>string target = 3;</code>
+         * @return The target.
+         */
+        java.lang.String getTarget();
+
+        /**
+         * <code>string target = 3;</code>
+         * @return The bytes for target.
+         */
+        com.google.protobuf.ByteString getTargetBytes();
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        java.util.List<context.ContextOuterClass.Fiber> getFibersList();
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        context.ContextOuterClass.Fiber getFibers(int index);
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        int getFibersCount();
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList();
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index);
+    }
+
+    /**
+     * Protobuf type {@code context.OpticalLinkDetails}
+     */
+    public static final class OpticalLinkDetails extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkDetails)
+    OpticalLinkDetailsOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use OpticalLinkDetails.newBuilder() to construct.
+        private OpticalLinkDetails(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private OpticalLinkDetails() {
+            source_ = "";
+            target_ = "";
+            fibers_ = java.util.Collections.emptyList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalLinkDetails();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
+        }
+
+        public static final int LENGTH_FIELD_NUMBER = 1;
+
+        private float length_ = 0F;
+
+        /**
+         * <code>float length = 1;</code>
+         * @return The length.
+         */
+        @java.lang.Override
+        public float getLength() {
+            return length_;
+        }
+
+        public static final int SOURCE_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object source_ = "";
+
+        /**
+         * <code>string source = 2;</code>
+         * @return The source.
+         */
+        @java.lang.Override
+        public java.lang.String getSource() {
+            java.lang.Object ref = source_;
+            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();
+                source_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string source = 2;</code>
+         * @return The bytes for source.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getSourceBytes() {
+            java.lang.Object ref = source_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                source_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int TARGET_FIELD_NUMBER = 3;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object target_ = "";
+
+        /**
+         * <code>string target = 3;</code>
+         * @return The target.
+         */
+        @java.lang.Override
+        public java.lang.String getTarget() {
+            java.lang.Object ref = target_;
+            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();
+                target_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string target = 3;</code>
+         * @return The bytes for target.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getTargetBytes() {
+            java.lang.Object ref = target_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                target_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int FIBERS_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.Fiber> fibers_;
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.Fiber> getFibersList() {
+            return fibers_;
+        }
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList() {
+            return fibers_;
+        }
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        @java.lang.Override
+        public int getFibersCount() {
+            return fibers_.size();
+        }
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Fiber getFibers(int index) {
+            return fibers_.get(index);
+        }
+
+        /**
+         * <code>repeated .context.Fiber fibers = 4;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index) {
+            return fibers_.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 {
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                output.writeFloat(1, length_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(source_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, source_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(target_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, target_);
+            }
+            for (int i = 0; i < fibers_.size(); i++) {
+                output.writeMessage(4, fibers_.get(i));
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, length_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(source_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, source_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(target_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, target_);
+            }
+            for (int i = 0; i < fibers_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, fibers_.get(i));
+            }
+            size += getUnknownFields().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.OpticalLinkDetails)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalLinkDetails other = (context.ContextOuterClass.OpticalLinkDetails) obj;
+            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
+                return false;
+            if (!getSource().equals(other.getSource()))
+                return false;
+            if (!getTarget().equals(other.getTarget()))
+                return false;
+            if (!getFibersList().equals(other.getFibersList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
+            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
+            hash = (37 * hash) + SOURCE_FIELD_NUMBER;
+            hash = (53 * hash) + getSource().hashCode();
+            hash = (37 * hash) + TARGET_FIELD_NUMBER;
+            hash = (53 * hash) + getTarget().hashCode();
+            if (getFibersCount() > 0) {
+                hash = (37 * hash) + FIBERS_FIELD_NUMBER;
+                hash = (53 * hash) + getFibersList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails 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.OpticalLinkDetails parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails 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.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails 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.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails 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.OpticalLinkDetails 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.OpticalLinkDetails}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkDetails)
+        context.ContextOuterClass.OpticalLinkDetailsOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.OpticalLinkDetails.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                length_ = 0F;
+                source_ = "";
+                target_ = "";
+                if (fibersBuilder_ == null) {
+                    fibers_ = java.util.Collections.emptyList();
+                } else {
+                    fibers_ = null;
+                    fibersBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000008);
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLinkDetails build() {
+                context.ContextOuterClass.OpticalLinkDetails result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLinkDetails buildPartial() {
+                context.ContextOuterClass.OpticalLinkDetails result = new context.ContextOuterClass.OpticalLinkDetails(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalLinkDetails result) {
+                if (fibersBuilder_ == null) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
+                        fibers_ = java.util.Collections.unmodifiableList(fibers_);
+                        bitField0_ = (bitField0_ & ~0x00000008);
+                    }
+                    result.fibers_ = fibers_;
+                } else {
+                    result.fibers_ = fibersBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalLinkDetails result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.length_ = length_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.source_ = source_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.target_ = target_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalLinkDetails) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLinkDetails) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkDetails other) {
+                if (other == context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance())
+                    return this;
+                if (other.getLength() != 0F) {
+                    setLength(other.getLength());
+                }
+                if (!other.getSource().isEmpty()) {
+                    source_ = other.source_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                if (!other.getTarget().isEmpty()) {
+                    target_ = other.target_;
+                    bitField0_ |= 0x00000004;
+                    onChanged();
+                }
+                if (fibersBuilder_ == null) {
+                    if (!other.fibers_.isEmpty()) {
+                        if (fibers_.isEmpty()) {
+                            fibers_ = other.fibers_;
+                            bitField0_ = (bitField0_ & ~0x00000008);
+                        } else {
+                            ensureFibersIsMutable();
+                            fibers_.addAll(other.fibers_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.fibers_.isEmpty()) {
+                        if (fibersBuilder_.isEmpty()) {
+                            fibersBuilder_.dispose();
+                            fibersBuilder_ = null;
+                            fibers_ = other.fibers_;
+                            bitField0_ = (bitField0_ & ~0x00000008);
+                            fibersBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getFibersFieldBuilder() : null;
+                        } else {
+                            fibersBuilder_.addAllMessages(other.fibers_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 13:
+                                {
+                                    length_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 13
+                            case 18:
+                                {
+                                    source_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    target_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.Fiber m = input.readMessage(context.ContextOuterClass.Fiber.parser(), extensionRegistry);
+                                    if (fibersBuilder_ == null) {
+                                        ensureFibersIsMutable();
+                                        fibers_.add(m);
+                                    } else {
+                                        fibersBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private float length_;
+
+            /**
+             * <code>float length = 1;</code>
+             * @return The length.
+             */
+            @java.lang.Override
+            public float getLength() {
+                return length_;
+            }
+
+            /**
+             * <code>float length = 1;</code>
+             * @param value The length to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLength(float value) {
+                length_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>float length = 1;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearLength() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                length_ = 0F;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object source_ = "";
+
+            /**
+             * <code>string source = 2;</code>
+             * @return The source.
+             */
+            public java.lang.String getSource() {
+                java.lang.Object ref = source_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    source_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string source = 2;</code>
+             * @return The bytes for source.
+             */
+            public com.google.protobuf.ByteString getSourceBytes() {
+                java.lang.Object ref = source_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    source_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string source = 2;</code>
+             * @param value The source to set.
+             * @return This builder for chaining.
+             */
+            public Builder setSource(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                source_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string source = 2;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearSource() {
+                source_ = getDefaultInstance().getSource();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string source = 2;</code>
+             * @param value The bytes for source to set.
+             * @return This builder for chaining.
+             */
+            public Builder setSourceBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                source_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object target_ = "";
+
+            /**
+             * <code>string target = 3;</code>
+             * @return The target.
+             */
+            public java.lang.String getTarget() {
+                java.lang.Object ref = target_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    target_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string target = 3;</code>
+             * @return The bytes for target.
+             */
+            public com.google.protobuf.ByteString getTargetBytes() {
+                java.lang.Object ref = target_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    target_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string target = 3;</code>
+             * @param value The target to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTarget(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                target_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string target = 3;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearTarget() {
+                target_ = getDefaultInstance().getTarget();
+                bitField0_ = (bitField0_ & ~0x00000004);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string target = 3;</code>
+             * @param value The bytes for target to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTargetBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                target_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            private java.util.List<context.ContextOuterClass.Fiber> fibers_ = java.util.Collections.emptyList();
+
+            private void ensureFibersIsMutable() {
+                if (!((bitField0_ & 0x00000008) != 0)) {
+                    fibers_ = new java.util.ArrayList<context.ContextOuterClass.Fiber>(fibers_);
+                    bitField0_ |= 0x00000008;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder> fibersBuilder_;
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public java.util.List<context.ContextOuterClass.Fiber> getFibersList() {
+                if (fibersBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(fibers_);
+                } else {
+                    return fibersBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public int getFibersCount() {
+                if (fibersBuilder_ == null) {
+                    return fibers_.size();
+                } else {
+                    return fibersBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public context.ContextOuterClass.Fiber getFibers(int index) {
+                if (fibersBuilder_ == null) {
+                    return fibers_.get(index);
+                } else {
+                    return fibersBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder setFibers(int index, context.ContextOuterClass.Fiber value) {
+                if (fibersBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureFibersIsMutable();
+                    fibers_.set(index, value);
+                    onChanged();
+                } else {
+                    fibersBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder setFibers(int index, context.ContextOuterClass.Fiber.Builder builderForValue) {
+                if (fibersBuilder_ == null) {
+                    ensureFibersIsMutable();
+                    fibers_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    fibersBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder addFibers(context.ContextOuterClass.Fiber value) {
+                if (fibersBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureFibersIsMutable();
+                    fibers_.add(value);
+                    onChanged();
+                } else {
+                    fibersBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder addFibers(int index, context.ContextOuterClass.Fiber value) {
+                if (fibersBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureFibersIsMutable();
+                    fibers_.add(index, value);
+                    onChanged();
+                } else {
+                    fibersBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder addFibers(context.ContextOuterClass.Fiber.Builder builderForValue) {
+                if (fibersBuilder_ == null) {
+                    ensureFibersIsMutable();
+                    fibers_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    fibersBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder addFibers(int index, context.ContextOuterClass.Fiber.Builder builderForValue) {
+                if (fibersBuilder_ == null) {
+                    ensureFibersIsMutable();
+                    fibers_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    fibersBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder addAllFibers(java.lang.Iterable<? extends context.ContextOuterClass.Fiber> values) {
+                if (fibersBuilder_ == null) {
+                    ensureFibersIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, fibers_);
+                    onChanged();
+                } else {
+                    fibersBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder clearFibers() {
+                if (fibersBuilder_ == null) {
+                    fibers_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000008);
+                    onChanged();
+                } else {
+                    fibersBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public Builder removeFibers(int index) {
+                if (fibersBuilder_ == null) {
+                    ensureFibersIsMutable();
+                    fibers_.remove(index);
+                    onChanged();
+                } else {
+                    fibersBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public context.ContextOuterClass.Fiber.Builder getFibersBuilder(int index) {
+                return getFibersFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index) {
+                if (fibersBuilder_ == null) {
+                    return fibers_.get(index);
+                } else {
+                    return fibersBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList() {
+                if (fibersBuilder_ != null) {
+                    return fibersBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(fibers_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public context.ContextOuterClass.Fiber.Builder addFibersBuilder() {
+                return getFibersFieldBuilder().addBuilder(context.ContextOuterClass.Fiber.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public context.ContextOuterClass.Fiber.Builder addFibersBuilder(int index) {
+                return getFibersFieldBuilder().addBuilder(index, context.ContextOuterClass.Fiber.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.Fiber fibers = 4;</code>
+             */
+            public java.util.List<context.ContextOuterClass.Fiber.Builder> getFibersBuilderList() {
+                return getFibersFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder> getFibersFieldBuilder() {
+                if (fibersBuilder_ == null) {
+                    fibersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder>(fibers_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
+                    fibers_ = null;
+                }
+                return fibersBuilder_;
+            }
+
+            @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.OpticalLinkDetails)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.OpticalLinkDetails)
+        private static final context.ContextOuterClass.OpticalLinkDetails DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkDetails();
+        }
+
+        public static context.ContextOuterClass.OpticalLinkDetails getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<OpticalLinkDetails> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkDetails>() {
+
+            @java.lang.Override
+            public OpticalLinkDetails parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<OpticalLinkDetails> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<OpticalLinkDetails> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface OpticalLinkOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLink)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>string name = 1;</code>
+         * @return The name.
+         */
+        java.lang.String getName();
+
+        /**
+         * <code>string name = 1;</code>
+         * @return The bytes for name.
+         */
+        com.google.protobuf.ByteString getNameBytes();
+
+        /**
+         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * @return Whether the details field is set.
+         */
+        boolean hasDetails();
+
+        /**
+         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * @return The details.
+         */
+        context.ContextOuterClass.OpticalLinkDetails getDetails();
+
+        /**
+         * <code>.context.OpticalLinkDetails details = 2;</code>
+         */
+        context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder();
+
+        /**
+         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * @return Whether the opticalLinkUuid field is set.
+         */
+        boolean hasOpticalLinkUuid();
+
+        /**
+         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * @return The opticalLinkUuid.
+         */
+        context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid();
+
+        /**
+         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         */
+        context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.OpticalLink}
+     */
+    public static final class OpticalLink extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLink)
+    OpticalLinkOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use OpticalLink.newBuilder() to construct.
+        private OpticalLink(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private OpticalLink() {
+            name_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalLink();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
+        }
+
+        public static final int NAME_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
+
+        /**
+         * <code>string name = 1;</code>
+         * @return The name.
+         */
+        @java.lang.Override
+        public java.lang.String getName() {
+            java.lang.Object ref = name_;
+            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();
+                name_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string name = 1;</code>
+         * @return The bytes for name.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getNameBytes() {
+            java.lang.Object ref = name_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                name_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int DETAILS_FIELD_NUMBER = 2;
+
+        private context.ContextOuterClass.OpticalLinkDetails details_;
+
+        /**
+         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * @return Whether the details field is set.
+         */
+        @java.lang.Override
+        public boolean hasDetails() {
+            return details_ != null;
+        }
+
+        /**
+         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * @return The details.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkDetails getDetails() {
+            return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+        }
+
+        /**
+         * <code>.context.OpticalLinkDetails details = 2;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder() {
+            return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+        }
+
+        public static final int OPTICAL_LINK_UUID_FIELD_NUMBER = 3;
+
+        private context.ContextOuterClass.OpticalLinkId opticalLinkUuid_;
+
+        /**
+         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * @return Whether the opticalLinkUuid field is set.
+         */
+        @java.lang.Override
+        public boolean hasOpticalLinkUuid() {
+            return opticalLinkUuid_ != null;
+        }
+
+        /**
+         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * @return The opticalLinkUuid.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid() {
+            return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+        }
+
+        /**
+         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder() {
+            return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+        }
+
+        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 (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+            }
+            if (details_ != null) {
+                output.writeMessage(2, getDetails());
+            }
+            if (opticalLinkUuid_ != null) {
+                output.writeMessage(3, getOpticalLinkUuid());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+            }
+            if (details_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDetails());
+            }
+            if (opticalLinkUuid_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getOpticalLinkUuid());
+            }
+            size += getUnknownFields().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.OpticalLink)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalLink other = (context.ContextOuterClass.OpticalLink) obj;
+            if (!getName().equals(other.getName()))
+                return false;
+            if (hasDetails() != other.hasDetails())
+                return false;
+            if (hasDetails()) {
+                if (!getDetails().equals(other.getDetails()))
+                    return false;
+            }
+            if (hasOpticalLinkUuid() != other.hasOpticalLinkUuid())
+                return false;
+            if (hasOpticalLinkUuid()) {
+                if (!getOpticalLinkUuid().equals(other.getOpticalLinkUuid()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getName().hashCode();
+            if (hasDetails()) {
+                hash = (37 * hash) + DETAILS_FIELD_NUMBER;
+                hash = (53 * hash) + getDetails().hashCode();
+            }
+            if (hasOpticalLinkUuid()) {
+                hash = (37 * hash) + OPTICAL_LINK_UUID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinkUuid().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLink parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLink parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLink 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.OpticalLink}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLink)
+        context.ContextOuterClass.OpticalLinkOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.OpticalLink.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                name_ = "";
+                details_ = null;
+                if (detailsBuilder_ != null) {
+                    detailsBuilder_.dispose();
+                    detailsBuilder_ = null;
+                }
+                opticalLinkUuid_ = null;
+                if (opticalLinkUuidBuilder_ != null) {
+                    opticalLinkUuidBuilder_.dispose();
+                    opticalLinkUuidBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLink.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLink build() {
+                context.ContextOuterClass.OpticalLink result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalLink buildPartial() {
+                context.ContextOuterClass.OpticalLink result = new context.ContextOuterClass.OpticalLink(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalLink result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.details_ = detailsBuilder_ == null ? details_ : detailsBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.opticalLinkUuid_ = opticalLinkUuidBuilder_ == null ? opticalLinkUuid_ : opticalLinkUuidBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalLink) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLink) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLink other) {
+                if (other == context.ContextOuterClass.OpticalLink.getDefaultInstance())
+                    return this;
+                if (!other.getName().isEmpty()) {
+                    name_ = other.name_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                if (other.hasDetails()) {
+                    mergeDetails(other.getDetails());
+                }
+                if (other.hasOpticalLinkUuid()) {
+                    mergeOpticalLinkUuid(other.getOpticalLinkUuid());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getDetailsFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getOpticalLinkUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object name_ = "";
+
+            /**
+             * <code>string name = 1;</code>
+             * @return The name.
+             */
+            public java.lang.String getName() {
+                java.lang.Object ref = name_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    name_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @return The bytes for name.
+             */
+            public com.google.protobuf.ByteString getNameBytes() {
+                java.lang.Object ref = name_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    name_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @param value The name to set.
+             * @return This builder for chaining.
+             */
+            public Builder setName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                name_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearName() {
+                name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @param value The bytes for name to set.
+             * @return This builder for chaining.
+             */
+            public Builder setNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                name_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            private context.ContextOuterClass.OpticalLinkDetails details_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> detailsBuilder_;
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * @return Whether the details field is set.
+             */
+            public boolean hasDetails() {
+                return ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * @return The details.
+             */
+            public context.ContextOuterClass.OpticalLinkDetails getDetails() {
+                if (detailsBuilder_ == null) {
+                    return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+                } else {
+                    return detailsBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            public Builder setDetails(context.ContextOuterClass.OpticalLinkDetails value) {
+                if (detailsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    details_ = value;
+                } else {
+                    detailsBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            public Builder setDetails(context.ContextOuterClass.OpticalLinkDetails.Builder builderForValue) {
+                if (detailsBuilder_ == null) {
+                    details_ = builderForValue.build();
+                } else {
+                    detailsBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            public Builder mergeDetails(context.ContextOuterClass.OpticalLinkDetails value) {
+                if (detailsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && details_ != null && details_ != context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance()) {
+                        getDetailsBuilder().mergeFrom(value);
+                    } else {
+                        details_ = value;
+                    }
+                } else {
+                    detailsBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            public Builder clearDetails() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                details_ = null;
+                if (detailsBuilder_ != null) {
+                    detailsBuilder_.dispose();
+                    detailsBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkDetails.Builder getDetailsBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getDetailsFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder() {
+                if (detailsBuilder_ != null) {
+                    return detailsBuilder_.getMessageOrBuilder();
+                } else {
+                    return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+                }
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails details = 2;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> getDetailsFieldBuilder() {
+                if (detailsBuilder_ == null) {
+                    detailsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder>(getDetails(), getParentForChildren(), isClean());
+                    details_ = null;
+                }
+                return detailsBuilder_;
+            }
+
+            private context.ContextOuterClass.OpticalLinkId opticalLinkUuid_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder> opticalLinkUuidBuilder_;
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * @return Whether the opticalLinkUuid field is set.
+             */
+            public boolean hasOpticalLinkUuid() {
+                return ((bitField0_ & 0x00000004) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * @return The opticalLinkUuid.
+             */
+            public context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid() {
+                if (opticalLinkUuidBuilder_ == null) {
+                    return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+                } else {
+                    return opticalLinkUuidBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            public Builder setOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId value) {
+                if (opticalLinkUuidBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalLinkUuid_ = value;
+                } else {
+                    opticalLinkUuidBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            public Builder setOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId.Builder builderForValue) {
+                if (opticalLinkUuidBuilder_ == null) {
+                    opticalLinkUuid_ = builderForValue.build();
+                } else {
+                    opticalLinkUuidBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            public Builder mergeOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId value) {
+                if (opticalLinkUuidBuilder_ == null) {
+                    if (((bitField0_ & 0x00000004) != 0) && opticalLinkUuid_ != null && opticalLinkUuid_ != context.ContextOuterClass.OpticalLinkId.getDefaultInstance()) {
+                        getOpticalLinkUuidBuilder().mergeFrom(value);
+                    } else {
+                        opticalLinkUuid_ = value;
+                    }
+                } else {
+                    opticalLinkUuidBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            public Builder clearOpticalLinkUuid() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                opticalLinkUuid_ = null;
+                if (opticalLinkUuidBuilder_ != null) {
+                    opticalLinkUuidBuilder_.dispose();
+                    opticalLinkUuidBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkId.Builder getOpticalLinkUuidBuilder() {
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return getOpticalLinkUuidFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder() {
+                if (opticalLinkUuidBuilder_ != null) {
+                    return opticalLinkUuidBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+                }
+            }
+
+            /**
+             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder> getOpticalLinkUuidFieldBuilder() {
+                if (opticalLinkUuidBuilder_ == null) {
+                    opticalLinkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder>(getOpticalLinkUuid(), getParentForChildren(), isClean());
+                    opticalLinkUuid_ = null;
+                }
+                return opticalLinkUuidBuilder_;
+            }
+
+            @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.OpticalLink)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.OpticalLink)
+        private static final context.ContextOuterClass.OpticalLink DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLink();
+        }
+
+        public static context.ContextOuterClass.OpticalLink getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<OpticalLink> PARSER = new com.google.protobuf.AbstractParser<OpticalLink>() {
+
+            @java.lang.Override
+            public OpticalLink parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<OpticalLink> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<OpticalLink> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Empty_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Empty_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Uuid_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Uuid_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Timestamp_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Timestamp_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Event_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Event_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Context_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Context_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextIdList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextIdList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ContextEvent_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ContextEvent_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Topology_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Topology_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyDetails_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyDetails_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyIdList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyIdList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_TopologyEvent_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_TopologyEvent_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Device_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Device_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Component_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Component_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Component_AttributesEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Component_AttributesEntry_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceConfig_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceConfig_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceIdList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceIdList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceFilter_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceFilter_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_DeviceEvent_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_DeviceEvent_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkAttributes_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkAttributes_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Link_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Link_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkIdList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkIdList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_LinkEvent_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_LinkEvent_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Service_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Service_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceStatus_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceStatus_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceConfig_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceConfig_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceIdList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceIdList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceFilter_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceFilter_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceEvent_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceEvent_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Slice_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Slice_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceOwner_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceOwner_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceStatus_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceStatus_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceConfig_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceConfig_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceIdList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceIdList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceFilter_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceFilter_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_SliceEvent_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_SliceEvent_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConnectionId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConnectionId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConnectionSettings_L0_descriptor;
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConnectionSettings_L0_fieldAccessorTable;
 
@@ -69611,6 +76651,38 @@ public final class ContextOuterClass {
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_AuthenticationResult_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalConfigId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfigId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalConfig_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfig_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalConfigList_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfigList_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_FiberId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_FiberId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Fiber_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Fiber_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLink_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLink_fieldAccessorTable;
+
     public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
         return descriptor;
     }
@@ -69618,7 +76690,7 @@ public final class ContextOuterClass {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" + "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" + "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" + "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" + ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" + ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" + "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" + "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" + "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" + "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" + "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" + "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" + "t.TeraFlowController\"8\n\rContextIdList\022\'\n" + "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" + "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" + "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" + "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" + "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\214\001\n\010Topolog" + "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" + "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." + "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" + "text.LinkId\"\211\001\n\017TopologyDetails\022(\n\013topol" + "ogy_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004nam" + "e\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.Devic" + "e\022\034\n\005links\030\004 \003(\0132\r.context.Link\";\n\016Topol" + "ogyIdList\022)\n\014topology_ids\030\001 \003(\0132\023.contex" + "t.TopologyId\"5\n\014TopologyList\022%\n\ntopologi" + "es\030\001 \003(\0132\021.context.Topology\"X\n\rTopologyE" + "vent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013t" + "opology_id\030\002 \001(\0132\023.context.TopologyId\".\n" + "\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r.context" + ".Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.co" + "ntext.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device_t" + "ype\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\0132\025.conte" + "xt.DeviceConfig\022G\n\031device_operational_st" + "atus\030\005 \001(\0162$.context.DeviceOperationalSt" + "atusEnum\0221\n\016device_drivers\030\006 \003(\0162\031.conte" + "xt.DeviceDriverEnum\022+\n\020device_endpoints\030" + "\007 \003(\0132\021.context.EndPoint\022&\n\ncomponents\030\010" + " \003(\0132\022.context.Component\022(\n\rcontroller_i" + "d\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tComponent" + "\022%\n\016component_uuid\030\001 \001(\0132\r.context.Uuid\022" + "\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\nattribute" + "s\030\004 \003(\0132\".context.Component.AttributesEn" + "try\022\016\n\006parent\030\005 \001(\t\0321\n\017AttributesEntry\022\013" + "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9\n\014Device" + "Config\022)\n\014config_rules\030\001 \003(\0132\023.context.C" + "onfigRule\"5\n\014DeviceIdList\022%\n\ndevice_ids\030" + "\001 \003(\0132\021.context.DeviceId\".\n\nDeviceList\022 " + "\n\007devices\030\001 \003(\0132\017.context.Device\"\216\001\n\014Dev" + "iceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025.context." + "DeviceIdList\022\031\n\021include_endpoints\030\002 \001(\010\022" + "\034\n\024include_config_rules\030\003 \001(\010\022\032\n\022include" + "_components\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005eve" + "nt\030\001 \001(\0132\016.context.Event\022$\n\tdevice_id\030\002 " + "\001(\0132\021.context.DeviceId\022,\n\rdevice_config\030" + "\003 \001(\0132\025.context.DeviceConfig\"*\n\006LinkId\022 " + "\n\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"I\n\016Link" + "Attributes\022\033\n\023total_capacity_gbps\030\001 \001(\002\022" + "\032\n\022used_capacity_gbps\030\002 \001(\002\"\223\001\n\004Link\022 \n\007" + "link_id\030\001 \001(\0132\017.context.LinkId\022\014\n\004name\030\002" + " \001(\t\022.\n\021link_endpoint_ids\030\003 \003(\0132\023.contex" + "t.EndPointId\022+\n\nattributes\030\004 \001(\0132\027.conte" + "xt.LinkAttributes\"/\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\"\333\002\n" + "\007Service\022&\n\nservice_id\030\001 \001(\0132\022.context.S" + "erviceId\022\014\n\004name\030\002 \001(\t\022.\n\014service_type\030\003" + " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" + "e_endpoint_ids\030\004 \003(\0132\023.context.EndPointI" + "d\0220\n\023service_constraints\030\005 \003(\0132\023.context" + ".Constraint\022.\n\016service_status\030\006 \001(\0132\026.co" + "ntext.ServiceStatus\022.\n\016service_config\030\007 " + "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" + "\030\010 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" + "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" + "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" + "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" + "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" + "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" + "\030\001 \003(\0132\020.context.Service\"\225\001\n\rServiceFilt" + "er\022+\n\013service_ids\030\001 \001(\0132\026.context.Servic" + "eIdList\022\034\n\024include_endpoint_ids\030\002 \001(\010\022\033\n" + "\023include_constraints\030\003 \001(\010\022\034\n\024include_co" + "nfig_rules\030\004 \001(\010\"U\n\014ServiceEvent\022\035\n\005even" + "t\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002 " + "\001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nco" + "ntext_id\030\001 \001(\0132\022.context.ContextId\022!\n\nsl" + "ice_uuid\030\002 \001(\0132\r.context.Uuid\"\240\003\n\005Slice\022" + "\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022\014\n\004n" + "ame\030\002 \001(\t\022/\n\022slice_endpoint_ids\030\003 \003(\0132\023." + "context.EndPointId\022.\n\021slice_constraints\030" + "\004 \003(\0132\023.context.Constraint\022-\n\021slice_serv" + "ice_ids\030\005 \003(\0132\022.context.ServiceId\022,\n\022sli" + "ce_subslice_ids\030\006 \003(\0132\020.context.SliceId\022" + "*\n\014slice_status\030\007 \001(\0132\024.context.SliceSta" + "tus\022*\n\014slice_config\030\010 \001(\0132\024.context.Slic" + "eConfig\022(\n\013slice_owner\030\t \001(\0132\023.context.S" + "liceOwner\022%\n\ttimestamp\030\n \001(\0132\022.context.T" + "imestamp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001" + "(\0132\r.context.Uuid\022\024\n\014owner_string\030\002 \001(\t\"" + "=\n\013SliceStatus\022.\n\014slice_status\030\001 \001(\0162\030.c" + "ontext.SliceStatusEnum\"8\n\013SliceConfig\022)\n" + "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" + "\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.con" + "text.SliceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(" + "\0132\016.context.Slice\"\312\001\n\013SliceFilter\022\'\n\tsli" + "ce_ids\030\001 \001(\0132\024.context.SliceIdList\022\034\n\024in" + "clude_endpoint_ids\030\002 \001(\010\022\033\n\023include_cons" + "traints\030\003 \001(\010\022\033\n\023include_service_ids\030\004 \001" + "(\010\022\034\n\024include_subslice_ids\030\005 \001(\010\022\034\n\024incl" + "ude_config_rules\030\006 \001(\010\"O\n\nSliceEvent\022\035\n\005" + "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" + "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" + "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" + "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" + "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" + "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" + "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" + " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" + "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" + "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" + "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" + "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" + "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" + "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" + "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" + "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" + "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" + "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" + ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" + "\rconnection_id\030\001 \001(\0132\025.context.Connectio" + "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" + "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" + "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" + "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" + "\033.context.ConnectionSettings\"A\n\020Connecti" + "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" + "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" + "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" + "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." + "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" + "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" + "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" + "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" + "uid\030\003 \001(\0132\r.context.Uuid\"\302\001\n\010EndPoint\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\014\n\004name\030\002 \001(\t\022\025\n\rendpoint_type\030\003 \001(\t\0229\n\020" + "kpi_sample_types\030\004 \003(\0162\037.kpi_sample_type" + "s.KpiSampleType\022,\n\021endpoint_location\030\005 \001" + "(\0132\021.context.Location\"{\n\014EndPointName\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoint_name\030\003 " + "\001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016EndPointId" + "List\022)\n\014endpoint_ids\030\001 \003(\0132\023.context.End" + "PointId\"A\n\020EndPointNameList\022-\n\016endpoint_" + "names\030\001 \003(\0132\025.context.EndPointName\"A\n\021Co" + "nfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n" + "\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022" + "(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPointI" + "d\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n" + "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" + "nfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.context" + ".ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.cont" + "ext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n\021C" + "onstraint_Custom\022\027\n\017constraint_type\030\001 \001(" + "\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constrain" + "t_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rd" + "uration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010la" + "titude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Locat" + "ion\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 " + "\001(\0132\025.context.GPS_PositionH\000B\n\n\010location" + "\"l\n\033Constraint_EndPointLocation\022(\n\013endpo" + "int_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010loc" + "ation\030\002 \001(\0132\021.context.Location\"Y\n\033Constr" + "aint_EndPointPriority\022(\n\013endpoint_id\030\001 \001" + "(\0132\023.context.EndPointId\022\020\n\010priority\030\002 \001(" + "\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_laten" + "cy_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025" + "\n\rcapacity_gbps\030\001 \001(\002\"c\n\033Constraint_SLA_" + "Availability\022\032\n\022num_disjoint_paths\030\001 \001(\r" + "\022\022\n\nall_active\030\002 \001(\010\022\024\n\014availability\030\003 \001" + "(\002\"V\n\036Constraint_SLA_Isolation_level\0224\n\017" + "isolation_level\030\001 \003(\0162\033.context.Isolatio" + "nLevelEnum\"\242\001\n\025Constraint_Exclusions\022\024\n\014" + "is_permanent\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003(\0132\021" + ".context.DeviceId\022)\n\014endpoint_ids\030\003 \003(\0132" + "\023.context.EndPointId\022!\n\010link_ids\030\004 \003(\0132\017" + ".context.LinkId\"\333\004\n\nConstraint\022-\n\006action" + "\030\001 \001(\0162\035.context.ConstraintActionEnum\022,\n" + "\006custom\030\002 \001(\0132\032.context.Constraint_Custo" + "mH\000\0220\n\010schedule\030\003 \001(\0132\034.context.Constrai" + "nt_ScheduleH\000\022A\n\021endpoint_location\030\004 \001(\013" + "2$.context.Constraint_EndPointLocationH\000" + "\022A\n\021endpoint_priority\030\005 \001(\0132$.context.Co" + "nstraint_EndPointPriorityH\000\0228\n\014sla_capac" + "ity\030\006 \001(\0132 .context.Constraint_SLA_Capac" + "ityH\000\0226\n\013sla_latency\030\007 \001(\0132\037.context.Con" + "straint_SLA_LatencyH\000\022@\n\020sla_availabilit" + "y\030\010 \001(\0132$.context.Constraint_SLA_Availab" + "ilityH\000\022@\n\rsla_isolation\030\t \001(\0132\'.context" + ".Constraint_SLA_Isolation_levelH\000\0224\n\nexc" + "lusions\030\n \001(\0132\036.context.Constraint_Exclu" + "sionsH\000B\014\n\nconstraint\"^\n\022TeraFlowControl" + "ler\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" + "tId\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_UNDEF" + "INED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTTYP" + "E_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\321\002\n\020Dev" + "iceDriverEnum\022\032\n\026DEVICEDRIVER_UNDEFINED\020" + "\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVICE" + "DRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER_P" + "4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOLOG" + "Y\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_532\020\005\022\023\n\017DEVI" + "CEDRIVER_XR\020\006\022\033\n\027DEVICEDRIVER_IETF_L2VPN" + "\020\007\022 \n\034DEVICEDRIVER_GNMI_OPENCONFIG\020\010\022\032\n\026" + "DEVICEDRIVER_FLEXSCALE\020\t\022\032\n\026DEVICEDRIVER" + "_IETF_ACTN\020\n*\217\001\n\033DeviceOperationalStatus" + "Enum\022%\n!DEVICEOPERATIONALSTATUS_UNDEFINE" + "D\020\000\022$\n DEVICEOPERATIONALSTATUS_DISABLED\020" + "\001\022#\n\037DEVICEOPERATIONALSTATUS_ENABLED\020\002*\252" + "\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE_UNKNOW" + "N\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETYPE" + "_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVITY" + "_SERVICE\020\003\022\022\n\016SERVICETYPE_TE\020\004\022\023\n\017SERVIC" + "ETYPE_E2E\020\005*\304\001\n\021ServiceStatusEnum\022\033\n\027SER" + "VICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICESTATUS_" + "PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022\032\n\026S" + "ERVICESTATUS_UPDATING\020\003\022!\n\035SERVICESTATUS" + "_PENDING_REMOVAL\020\004\022\036\n\032SERVICESTATUS_SLA_" + "VIOLATED\020\005*\251\001\n\017SliceStatusEnum\022\031\n\025SLICES" + "TATUS_UNDEFINED\020\000\022\027\n\023SLICESTATUS_PLANNED" + "\020\001\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022SLICESTATUS_" + "ACTIVE\020\003\022\026\n\022SLICESTATUS_DEINIT\020\004\022\034\n\030SLIC" + "ESTATUS_SLA_VIOLATED\020\005*]\n\020ConfigActionEn" + "um\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022\024\n\020CONFIG" + "ACTION_SET\020\001\022\027\n\023CONFIGACTION_DELETE\020\002*m\n" + "\024ConstraintActionEnum\022\036\n\032CONSTRAINTACTIO" + "N_UNDEFINED\020\000\022\030\n\024CONSTRAINTACTION_SET\020\001\022" + "\033\n\027CONSTRAINTACTION_DELETE\020\002*\203\002\n\022Isolati" + "onLevelEnum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICA" + "L_ISOLATION\020\001\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021" + "PROCESS_ISOLATION\020\003\022\035\n\031PHYSICAL_MEMORY_I" + "SOLATION\020\004\022\036\n\032PHYSICAL_NETWORK_ISOLATION" + "\020\005\022\036\n\032VIRTUAL_RESOURCE_ISOLATION\020\006\022\037\n\033NE" + "TWORK_FUNCTIONS_ISOLATION\020\007\022\025\n\021SERVICE_I" + "SOLATION\020\0102\245\026\n\016ContextService\022:\n\016ListCon" + "textIds\022\016.context.Empty\032\026.context.Contex" + "tIdList\"\000\0226\n\014ListContexts\022\016.context.Empt" + "y\032\024.context.ContextList\"\000\0224\n\nGetContext\022" + "\022.context.ContextId\032\020.context.Context\"\000\022" + "4\n\nSetContext\022\020.context.Context\032\022.contex" + "t.ContextId\"\000\0225\n\rRemoveContext\022\022.context" + ".ContextId\032\016.context.Empty\"\000\022=\n\020GetConte" + "xtEvents\022\016.context.Empty\032\025.context.Conte" + "xtEvent\"\0000\001\022@\n\017ListTopologyIds\022\022.context" + ".ContextId\032\027.context.TopologyIdList\"\000\022=\n" + "\016ListTopologies\022\022.context.ContextId\032\025.co" + "ntext.TopologyList\"\000\0227\n\013GetTopology\022\023.co" + "ntext.TopologyId\032\021.context.Topology\"\000\022E\n" + "\022GetTopologyDetails\022\023.context.TopologyId" + "\032\030.context.TopologyDetails\"\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\022<\n\014SelectDevice\022\025.contex" + "t.DeviceFilter\032\023.context.DeviceList\"\000\022I\n" + "\021ListEndPointNames\022\027.context.EndPointIdL" + "ist\032\031.context.EndPointNameList\"\000\0224\n\013List" + "LinkIds\022\016.context.Empty\032\023.context.LinkId" + "List\"\000\0220\n\tListLinks\022\016.context.Empty\032\021.co" + "ntext.LinkList\"\000\022+\n\007GetLink\022\017.context.Li" + "nkId\032\r.context.Link\"\000\022+\n\007SetLink\022\r.conte" + "xt.Link\032\017.context.LinkId\"\000\022/\n\nRemoveLink" + "\022\017.context.LinkId\032\016.context.Empty\"\000\0227\n\rG" + "etLinkEvents\022\016.context.Empty\032\022.context.L" + "inkEvent\"\0000\001\022>\n\016ListServiceIds\022\022.context" + ".ContextId\032\026.context.ServiceIdList\"\000\022:\n\014" + "ListServices\022\022.context.ContextId\032\024.conte" + "xt.ServiceList\"\000\0224\n\nGetService\022\022.context" + ".ServiceId\032\020.context.Service\"\000\0224\n\nSetSer" + "vice\022\020.context.Service\032\022.context.Service" + "Id\"\000\0226\n\014UnsetService\022\020.context.Service\032\022" + ".context.ServiceId\"\000\0225\n\rRemoveService\022\022." + "context.ServiceId\032\016.context.Empty\"\000\022=\n\020G" + "etServiceEvents\022\016.context.Empty\032\025.contex" + "t.ServiceEvent\"\0000\001\022?\n\rSelectService\022\026.co" + "ntext.ServiceFilter\032\024.context.ServiceLis" + "t\"\000\022:\n\014ListSliceIds\022\022.context.ContextId\032" + "\024.context.SliceIdList\"\000\0226\n\nListSlices\022\022." + "context.ContextId\032\022.context.SliceList\"\000\022" + ".\n\010GetSlice\022\020.context.SliceId\032\016.context." + "Slice\"\000\022.\n\010SetSlice\022\016.context.Slice\032\020.co" + "ntext.SliceId\"\000\0220\n\nUnsetSlice\022\016.context." + "Slice\032\020.context.SliceId\"\000\0221\n\013RemoveSlice" + "\022\020.context.SliceId\032\016.context.Empty\"\000\0229\n\016" + "GetSliceEvents\022\016.context.Empty\032\023.context" + ".SliceEvent\"\0000\001\0229\n\013SelectSlice\022\024.context" + ".SliceFilter\032\022.context.SliceList\"\000\022D\n\021Li" + "stConnectionIds\022\022.context.ServiceId\032\031.co" + "ntext.ConnectionIdList\"\000\022@\n\017ListConnecti" + "ons\022\022.context.ServiceId\032\027.context.Connec" + "tionList\"\000\022=\n\rGetConnection\022\025.context.Co" + "nnectionId\032\023.context.Connection\"\000\022=\n\rSet" + "Connection\022\023.context.Connection\032\025.contex" + "t.ConnectionId\"\000\022;\n\020RemoveConnection\022\025.c" + "ontext.ConnectionId\032\016.context.Empty\"\000\022C\n" + "\023GetConnectionEvents\022\016.context.Empty\032\030.c" + "ontext.ConnectionEvent\"\0000\001b\006proto3" };
+        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" + "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" + "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" + "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" + ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" + ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" + "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" + "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" + "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" + "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" + "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" + "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" + "t.TeraFlowController\"8\n\rContextIdList\022\'\n" + "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" + "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" + "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" + "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" + "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\214\001\n\010Topolog" + "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" + "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." + "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" + "text.LinkId\"\211\001\n\017TopologyDetails\022(\n\013topol" + "ogy_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004nam" + "e\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.Devic" + "e\022\034\n\005links\030\004 \003(\0132\r.context.Link\";\n\016Topol" + "ogyIdList\022)\n\014topology_ids\030\001 \003(\0132\023.contex" + "t.TopologyId\"5\n\014TopologyList\022%\n\ntopologi" + "es\030\001 \003(\0132\021.context.Topology\"X\n\rTopologyE" + "vent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013t" + "opology_id\030\002 \001(\0132\023.context.TopologyId\".\n" + "\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r.context" + ".Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.co" + "ntext.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device_t" + "ype\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\0132\025.conte" + "xt.DeviceConfig\022G\n\031device_operational_st" + "atus\030\005 \001(\0162$.context.DeviceOperationalSt" + "atusEnum\0221\n\016device_drivers\030\006 \003(\0162\031.conte" + "xt.DeviceDriverEnum\022+\n\020device_endpoints\030" + "\007 \003(\0132\021.context.EndPoint\022&\n\ncomponents\030\010" + " \003(\0132\022.context.Component\022(\n\rcontroller_i" + "d\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tComponent" + "\022%\n\016component_uuid\030\001 \001(\0132\r.context.Uuid\022" + "\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\nattribute" + "s\030\004 \003(\0132\".context.Component.AttributesEn" + "try\022\016\n\006parent\030\005 \001(\t\0321\n\017AttributesEntry\022\013" + "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9\n\014Device" + "Config\022)\n\014config_rules\030\001 \003(\0132\023.context.C" + "onfigRule\"5\n\014DeviceIdList\022%\n\ndevice_ids\030" + "\001 \003(\0132\021.context.DeviceId\".\n\nDeviceList\022 " + "\n\007devices\030\001 \003(\0132\017.context.Device\"\216\001\n\014Dev" + "iceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025.context." + "DeviceIdList\022\031\n\021include_endpoints\030\002 \001(\010\022" + "\034\n\024include_config_rules\030\003 \001(\010\022\032\n\022include" + "_components\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005eve" + "nt\030\001 \001(\0132\016.context.Event\022$\n\tdevice_id\030\002 " + "\001(\0132\021.context.DeviceId\022,\n\rdevice_config\030" + "\003 \001(\0132\025.context.DeviceConfig\"*\n\006LinkId\022 " + "\n\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"I\n\016Link" + "Attributes\022\033\n\023total_capacity_gbps\030\001 \001(\002\022" + "\032\n\022used_capacity_gbps\030\002 \001(\002\"\223\001\n\004Link\022 \n\007" + "link_id\030\001 \001(\0132\017.context.LinkId\022\014\n\004name\030\002" + " \001(\t\022.\n\021link_endpoint_ids\030\003 \003(\0132\023.contex" + "t.EndPointId\022+\n\nattributes\030\004 \001(\0132\027.conte" + "xt.LinkAttributes\"/\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\"\333\002\n" + "\007Service\022&\n\nservice_id\030\001 \001(\0132\022.context.S" + "erviceId\022\014\n\004name\030\002 \001(\t\022.\n\014service_type\030\003" + " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" + "e_endpoint_ids\030\004 \003(\0132\023.context.EndPointI" + "d\0220\n\023service_constraints\030\005 \003(\0132\023.context" + ".Constraint\022.\n\016service_status\030\006 \001(\0132\026.co" + "ntext.ServiceStatus\022.\n\016service_config\030\007 " + "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" + "\030\010 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" + "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" + "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" + "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" + "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" + "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" + "\030\001 \003(\0132\020.context.Service\"\225\001\n\rServiceFilt" + "er\022+\n\013service_ids\030\001 \001(\0132\026.context.Servic" + "eIdList\022\034\n\024include_endpoint_ids\030\002 \001(\010\022\033\n" + "\023include_constraints\030\003 \001(\010\022\034\n\024include_co" + "nfig_rules\030\004 \001(\010\"U\n\014ServiceEvent\022\035\n\005even" + "t\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002 " + "\001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nco" + "ntext_id\030\001 \001(\0132\022.context.ContextId\022!\n\nsl" + "ice_uuid\030\002 \001(\0132\r.context.Uuid\"\240\003\n\005Slice\022" + "\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022\014\n\004n" + "ame\030\002 \001(\t\022/\n\022slice_endpoint_ids\030\003 \003(\0132\023." + "context.EndPointId\022.\n\021slice_constraints\030" + "\004 \003(\0132\023.context.Constraint\022-\n\021slice_serv" + "ice_ids\030\005 \003(\0132\022.context.ServiceId\022,\n\022sli" + "ce_subslice_ids\030\006 \003(\0132\020.context.SliceId\022" + "*\n\014slice_status\030\007 \001(\0132\024.context.SliceSta" + "tus\022*\n\014slice_config\030\010 \001(\0132\024.context.Slic" + "eConfig\022(\n\013slice_owner\030\t \001(\0132\023.context.S" + "liceOwner\022%\n\ttimestamp\030\n \001(\0132\022.context.T" + "imestamp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001" + "(\0132\r.context.Uuid\022\024\n\014owner_string\030\002 \001(\t\"" + "=\n\013SliceStatus\022.\n\014slice_status\030\001 \001(\0162\030.c" + "ontext.SliceStatusEnum\"8\n\013SliceConfig\022)\n" + "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" + "\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.con" + "text.SliceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(" + "\0132\016.context.Slice\"\312\001\n\013SliceFilter\022\'\n\tsli" + "ce_ids\030\001 \001(\0132\024.context.SliceIdList\022\034\n\024in" + "clude_endpoint_ids\030\002 \001(\010\022\033\n\023include_cons" + "traints\030\003 \001(\010\022\033\n\023include_service_ids\030\004 \001" + "(\010\022\034\n\024include_subslice_ids\030\005 \001(\010\022\034\n\024incl" + "ude_config_rules\030\006 \001(\010\"O\n\nSliceEvent\022\035\n\005" + "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" + "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" + "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" + "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" + "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" + "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" + "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" + " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" + "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" + "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" + "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" + "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" + "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" + "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" + "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" + "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" + "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" + "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" + ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" + "\rconnection_id\030\001 \001(\0132\025.context.Connectio" + "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" + "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" + "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" + "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" + "\033.context.ConnectionSettings\"A\n\020Connecti" + "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" + "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" + "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" + "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." + "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" + "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" + "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" + "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" + "uid\030\003 \001(\0132\r.context.Uuid\"\302\001\n\010EndPoint\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\014\n\004name\030\002 \001(\t\022\025\n\rendpoint_type\030\003 \001(\t\0229\n\020" + "kpi_sample_types\030\004 \003(\0162\037.kpi_sample_type" + "s.KpiSampleType\022,\n\021endpoint_location\030\005 \001" + "(\0132\021.context.Location\"{\n\014EndPointName\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoint_name\030\003 " + "\001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016EndPointId" + "List\022)\n\014endpoint_ids\030\001 \003(\0132\023.context.End" + "PointId\"A\n\020EndPointNameList\022-\n\016endpoint_" + "names\030\001 \003(\0132\025.context.EndPointName\"A\n\021Co" + "nfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n" + "\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022" + "(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPointI" + "d\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n" + "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" + "nfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.context" + ".ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.cont" + "ext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n\021C" + "onstraint_Custom\022\027\n\017constraint_type\030\001 \001(" + "\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constrain" + "t_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rd" + "uration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010la" + "titude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Locat" + "ion\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 " + "\001(\0132\025.context.GPS_PositionH\000B\n\n\010location" + "\"l\n\033Constraint_EndPointLocation\022(\n\013endpo" + "int_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010loc" + "ation\030\002 \001(\0132\021.context.Location\"Y\n\033Constr" + "aint_EndPointPriority\022(\n\013endpoint_id\030\001 \001" + "(\0132\023.context.EndPointId\022\020\n\010priority\030\002 \001(" + "\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_laten" + "cy_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025" + "\n\rcapacity_gbps\030\001 \001(\002\"c\n\033Constraint_SLA_" + "Availability\022\032\n\022num_disjoint_paths\030\001 \001(\r" + "\022\022\n\nall_active\030\002 \001(\010\022\024\n\014availability\030\003 \001" + "(\002\"V\n\036Constraint_SLA_Isolation_level\0224\n\017" + "isolation_level\030\001 \003(\0162\033.context.Isolatio" + "nLevelEnum\"\242\001\n\025Constraint_Exclusions\022\024\n\014" + "is_permanent\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003(\0132\021" + ".context.DeviceId\022)\n\014endpoint_ids\030\003 \003(\0132" + "\023.context.EndPointId\022!\n\010link_ids\030\004 \003(\0132\017" + ".context.LinkId\"\333\004\n\nConstraint\022-\n\006action" + "\030\001 \001(\0162\035.context.ConstraintActionEnum\022,\n" + "\006custom\030\002 \001(\0132\032.context.Constraint_Custo" + "mH\000\0220\n\010schedule\030\003 \001(\0132\034.context.Constrai" + "nt_ScheduleH\000\022A\n\021endpoint_location\030\004 \001(\013" + "2$.context.Constraint_EndPointLocationH\000" + "\022A\n\021endpoint_priority\030\005 \001(\0132$.context.Co" + "nstraint_EndPointPriorityH\000\0228\n\014sla_capac" + "ity\030\006 \001(\0132 .context.Constraint_SLA_Capac" + "ityH\000\0226\n\013sla_latency\030\007 \001(\0132\037.context.Con" + "straint_SLA_LatencyH\000\022@\n\020sla_availabilit" + "y\030\010 \001(\0132$.context.Constraint_SLA_Availab" + "ilityH\000\022@\n\rsla_isolation\030\t \001(\0132\'.context" + ".Constraint_SLA_Isolation_levelH\000\0224\n\nexc" + "lusions\030\n \001(\0132\036.context.Constraint_Exclu" + "sionsH\000B\014\n\nconstraint\"^\n\022TeraFlowControl" + "ler\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" + "tId\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\"-\n\017OpticalConfigId\022\032\n\022opticalconfig" + "_uuid\030\001 \001(\t\"S\n\rOpticalConfig\0222\n\020opticalc" + "onfig_id\030\001 \001(\0132\030.context.OpticalConfigId" + "\022\016\n\006config\030\002 \001(\t\"C\n\021OpticalConfigList\022.\n" + "\016opticalconfigs\030\001 \003(\0132\026.context.OpticalC" + "onfig\"9\n\rOpticalLinkId\022(\n\021optical_link_u" + "uid\030\001 \001(\0132\r.context.Uuid\",\n\007FiberId\022!\n\nf" + "iber_uuid\030\001 \001(\0132\r.context.Uuid\"\341\001\n\005Fiber" + "\022\n\n\002ID\030\n \001(\t\022\020\n\010src_port\030\001 \001(\t\022\020\n\010dst_po" + "rt\030\002 \001(\t\022\027\n\017local_peer_port\030\003 \001(\t\022\030\n\020rem" + "ote_peer_port\030\004 \001(\t\022\017\n\007c_slots\030\005 \003(\005\022\017\n\007" + "l_slots\030\006 \003(\005\022\017\n\007s_slots\030\007 \003(\005\022\016\n\006length" + "\030\010 \001(\002\022\014\n\004used\030\t \001(\010\022$\n\nfiber_uuid\030\013 \001(\013" + "2\020.context.FiberId\"d\n\022OpticalLinkDetails" + "\022\016\n\006length\030\001 \001(\002\022\016\n\006source\030\002 \001(\t\022\016\n\006targ" + "et\030\003 \001(\t\022\036\n\006fibers\030\004 \003(\0132\016.context.Fiber" + "\"|\n\013OpticalLink\022\014\n\004name\030\001 \001(\t\022,\n\007details" + "\030\002 \001(\0132\033.context.OpticalLinkDetails\0221\n\021o" + "ptical_link_uuid\030\003 \001(\0132\026.context.Optical" + "LinkId*j\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UND" + "EFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTT" + "YPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\346\002\n\020D" + "eviceDriverEnum\022\032\n\026DEVICEDRIVER_UNDEFINE" + "D\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVI" + "CEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER" + "_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOL" + "OGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_532\020\005\022\023\n\017DE" + "VICEDRIVER_XR\020\006\022\033\n\027DEVICEDRIVER_IETF_L2V" + "PN\020\007\022 \n\034DEVICEDRIVER_GNMI_OPENCONFIG\020\010\022\032" + "\n\026DEVICEDRIVER_FLEXSCALE\020\t\022\032\n\026DEVICEDRIV" + "ER_IETF_ACTN\020\n\022\023\n\017DEVICEDRIVER_OC\020\013*\217\001\n\033" + "DeviceOperationalStatusEnum\022%\n!DEVICEOPE" + "RATIONALSTATUS_UNDEFINED\020\000\022$\n DEVICEOPER" + "ATIONALSTATUS_DISABLED\020\001\022#\n\037DEVICEOPERAT" + "IONALSTATUS_ENABLED\020\002*\320\001\n\017ServiceTypeEnu" + "m\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020SERVICETYP" + "E_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SERVIC" + "ETYPE_TAPI_CONNECTIVITY_SERVICE\020\003\022\022\n\016SER" + "VICETYPE_TE\020\004\022\023\n\017SERVICETYPE_E2E\020\005\022$\n SE" + "RVICETYPE_OPTICAL_CONNECTIVITY\020\006*\304\001\n\021Ser" + "viceStatusEnum\022\033\n\027SERVICESTATUS_UNDEFINE" + "D\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024SERVIC" + "ESTATUS_ACTIVE\020\002\022\032\n\026SERVICESTATUS_UPDATI" + "NG\020\003\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\004\022" + "\036\n\032SERVICESTATUS_SLA_VIOLATED\020\005*\251\001\n\017Slic" + "eStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027" + "\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_I" + "NIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICEST" + "ATUS_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATE" + "D\020\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_" + "UNDEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CON" + "FIGACTION_DELETE\020\002*m\n\024ConstraintActionEn" + "um\022\036\n\032CONSTRAINTACTION_UNDEFINED\020\000\022\030\n\024CO" + "NSTRAINTACTION_SET\020\001\022\033\n\027CONSTRAINTACTION" + "_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020\n\014NO_I" + "SOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025\n\021LO" + "GICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLATION\020\003" + "\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n\032PHYSI" + "CAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL_RESOU" + "RCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIONS_ISO" + "LATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\246\031\n\016Cont" + "extService\022:\n\016ListContextIds\022\016.context.E" + "mpty\032\026.context.ContextIdList\"\000\0226\n\014ListCo" + "ntexts\022\016.context.Empty\032\024.context.Context" + "List\"\000\0224\n\nGetContext\022\022.context.ContextId" + "\032\020.context.Context\"\000\0224\n\nSetContext\022\020.con" + "text.Context\032\022.context.ContextId\"\000\0225\n\rRe" + "moveContext\022\022.context.ContextId\032\016.contex" + "t.Empty\"\000\022=\n\020GetContextEvents\022\016.context." + "Empty\032\025.context.ContextEvent\"\0000\001\022@\n\017List" + "TopologyIds\022\022.context.ContextId\032\027.contex" + "t.TopologyIdList\"\000\022=\n\016ListTopologies\022\022.c" + "ontext.ContextId\032\025.context.TopologyList\"" + "\000\0227\n\013GetTopology\022\023.context.TopologyId\032\021." + "context.Topology\"\000\022E\n\022GetTopologyDetails" + "\022\023.context.TopologyId\032\030.context.Topology" + "Details\"\000\0227\n\013SetTopology\022\021.context.Topol" + "ogy\032\023.context.TopologyId\"\000\0227\n\016RemoveTopo" + "logy\022\023.context.TopologyId\032\016.context.Empt" + "y\"\000\022?\n\021GetTopologyEvents\022\016.context.Empty" + "\032\026.context.TopologyEvent\"\0000\001\0228\n\rListDevi" + "ceIds\022\016.context.Empty\032\025.context.DeviceId" + "List\"\000\0224\n\013ListDevices\022\016.context.Empty\032\023." + "context.DeviceList\"\000\0221\n\tGetDevice\022\021.cont" + "ext.DeviceId\032\017.context.Device\"\000\0221\n\tSetDe" + "vice\022\017.context.Device\032\021.context.DeviceId" + "\"\000\0223\n\014RemoveDevice\022\021.context.DeviceId\032\016." + "context.Empty\"\000\022;\n\017GetDeviceEvents\022\016.con" + "text.Empty\032\024.context.DeviceEvent\"\0000\001\022<\n\014" + "SelectDevice\022\025.context.DeviceFilter\032\023.co" + "ntext.DeviceList\"\000\022I\n\021ListEndPointNames\022" + "\027.context.EndPointIdList\032\031.context.EndPo" + "intNameList\"\000\0224\n\013ListLinkIds\022\016.context.E" + "mpty\032\023.context.LinkIdList\"\000\0220\n\tListLinks" + "\022\016.context.Empty\032\021.context.LinkList\"\000\022+\n" + "\007GetLink\022\017.context.LinkId\032\r.context.Link" + "\"\000\022+\n\007SetLink\022\r.context.Link\032\017.context.L" + "inkId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016" + ".context.Empty\"\000\0227\n\rGetLinkEvents\022\016.cont" + "ext.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016Lis" + "tServiceIds\022\022.context.ContextId\032\026.contex" + "t.ServiceIdList\"\000\022:\n\014ListServices\022\022.cont" + "ext.ContextId\032\024.context.ServiceList\"\000\0224\n" + "\nGetService\022\022.context.ServiceId\032\020.contex" + "t.Service\"\000\0224\n\nSetService\022\020.context.Serv" + "ice\032\022.context.ServiceId\"\000\0226\n\014UnsetServic" + "e\022\020.context.Service\032\022.context.ServiceId\"" + "\000\0225\n\rRemoveService\022\022.context.ServiceId\032\016" + ".context.Empty\"\000\022=\n\020GetServiceEvents\022\016.c" + "ontext.Empty\032\025.context.ServiceEvent\"\0000\001\022" + "?\n\rSelectService\022\026.context.ServiceFilter" + "\032\024.context.ServiceList\"\000\022:\n\014ListSliceIds" + "\022\022.context.ContextId\032\024.context.SliceIdLi" + "st\"\000\0226\n\nListSlices\022\022.context.ContextId\032\022" + ".context.SliceList\"\000\022.\n\010GetSlice\022\020.conte" + "xt.SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice" + "\022\016.context.Slice\032\020.context.SliceId\"\000\0220\n\n" + "UnsetSlice\022\016.context.Slice\032\020.context.Sli" + "ceId\"\000\0221\n\013RemoveSlice\022\020.context.SliceId\032" + "\016.context.Empty\"\000\0229\n\016GetSliceEvents\022\016.co" + "ntext.Empty\032\023.context.SliceEvent\"\0000\001\0229\n\013" + "SelectSlice\022\024.context.SliceFilter\032\022.cont" + "ext.SliceList\"\000\022D\n\021ListConnectionIds\022\022.c" + "ontext.ServiceId\032\031.context.ConnectionIdL" + "ist\"\000\022@\n\017ListConnections\022\022.context.Servi" + "ceId\032\027.context.ConnectionList\"\000\022=\n\rGetCo" + "nnection\022\025.context.ConnectionId\032\023.contex" + "t.Connection\"\000\022=\n\rSetConnection\022\023.contex" + "t.Connection\032\025.context.ConnectionId\"\000\022;\n" + "\020RemoveConnection\022\025.context.ConnectionId" + "\032\016.context.Empty\"\000\022C\n\023GetConnectionEvent" + "s\022\016.context.Empty\032\030.context.ConnectionEv" + "ent\"\0000\001\022@\n\020GetOpticalConfig\022\016.context.Em" + "pty\032\032.context.OpticalConfigList\"\000\022F\n\020Set" + "OpticalConfig\022\026.context.OpticalConfig\032\030." + "context.OpticalConfigId\"\000\022I\n\023SelectOptic" + "alConfig\022\030.context.OpticalConfigId\032\026.con" + "text.OpticalConfig\"\000\0228\n\016SetOpticalLink\022\024" + ".context.OpticalLink\032\016.context.Empty\"\000\022@" + "\n\016GetOpticalLink\022\026.context.OpticalLinkId" + "\032\024.context.OpticalLink\"\000\022.\n\010GetFiber\022\020.c" + "ontext.FiberId\032\016.context.Fiber\"\000b\006proto3" };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { acl.Acl.getDescriptor(), kpi_sample_types.KpiSampleTypes.getDescriptor() });
         internal_static_context_Empty_descriptor = getDescriptor().getMessageTypes().get(0);
         internal_static_context_Empty_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Empty_descriptor, new java.lang.String[] {});
@@ -69778,6 +76850,22 @@ public final class ContextOuterClass {
         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(77);
         internal_static_context_AuthenticationResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_AuthenticationResult_descriptor, new java.lang.String[] { "ContextId", "Authenticated" });
+        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(78);
+        internal_static_context_OpticalConfigId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigId_descriptor, new java.lang.String[] { "OpticalconfigUuid" });
+        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(79);
+        internal_static_context_OpticalConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfig_descriptor, new java.lang.String[] { "OpticalconfigId", "Config" });
+        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(80);
+        internal_static_context_OpticalConfigList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigList_descriptor, new java.lang.String[] { "Opticalconfigs" });
+        internal_static_context_OpticalLinkId_descriptor = getDescriptor().getMessageTypes().get(81);
+        internal_static_context_OpticalLinkId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkId_descriptor, new java.lang.String[] { "OpticalLinkUuid" });
+        internal_static_context_FiberId_descriptor = getDescriptor().getMessageTypes().get(82);
+        internal_static_context_FiberId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_FiberId_descriptor, new java.lang.String[] { "FiberUuid" });
+        internal_static_context_Fiber_descriptor = getDescriptor().getMessageTypes().get(83);
+        internal_static_context_Fiber_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Fiber_descriptor, new java.lang.String[] { "ID", "SrcPort", "DstPort", "LocalPeerPort", "RemotePeerPort", "CSlots", "LSlots", "SSlots", "Length", "Used", "FiberUuid" });
+        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(84);
+        internal_static_context_OpticalLinkDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_descriptor, new java.lang.String[] { "Length", "Source", "Target", "Fibers" });
+        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(85);
+        internal_static_context_OpticalLink_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLink_descriptor, new java.lang.String[] { "Name", "Details", "OpticalLinkUuid" });
         acl.Acl.getDescriptor();
         kpi_sample_types.KpiSampleTypes.getDescriptor();
     }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextService.java b/src/policy/target/generated-sources/grpc/context/ContextService.java
index f1c089fb564dbd0546b84ea19aa35f26ff331881..32544e6beba009b31b06dcd583893933c15eb1fe 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextService.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextService.java
@@ -89,6 +89,23 @@ public interface ContextService extends MutinyService {
 
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeConnection(context.ContextOuterClass.ConnectionId request);
 
+    /**
+     * <pre>
+     *  ------------------------------ Experimental -----------------------------
+     * </pre>
+     */
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigList> getOpticalConfig(context.ContextOuterClass.Empty request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request);
+
     io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request);
 
     io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request);
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
index db1b9c1705820591966896bfbe353360304f58a0..d3c1b628573bf328f51de68a68d21690c2ff7045 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -391,6 +391,60 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
         }
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigList> getOpticalConfig(context.ContextOuterClass.Empty request) {
+        try {
+            return delegate.getOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+        try {
+            return delegate.setOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+        try {
+            return delegate.selectOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
+        try {
+            return delegate.setOpticalLink(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        try {
+            return delegate.getOpticalLink(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+        try {
+            return delegate.getFiber(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) {
         try {
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
index 88ab831f59f17e1e1ef197109a5917cda49dcc76..b1773578d3448de901839bf6e70e855ff58ad9e5 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -235,6 +235,36 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
         return stub.removeConnection(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigList> getOpticalConfig(context.ContextOuterClass.Empty request) {
+        return stub.getOpticalConfig(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+        return stub.setOpticalConfig(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+        return stub.selectOpticalConfig(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
+        return stub.setOpticalLink(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        return stub.getOpticalLink(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+        return stub.getFiber(request);
+    }
+
     @Override
     public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
         return stub.getContextEvents(request);
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
index defb37810c2d84b4ba40fcc85e1e77def272d50d..233312dd76b68ffefd109cd2ec4ca48df68275fd 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -749,6 +749,96 @@ public final class ContextServiceGrpc {
         return getGetConnectionEventsMethod;
     }
 
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList> getGetOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalConfig", requestType = context.ContextOuterClass.Empty.class, responseType = context.ContextOuterClass.OpticalConfigList.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList> getGetOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList> getGetOpticalConfigMethod;
+        if ((getGetOpticalConfigMethod = ContextServiceGrpc.getGetOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getGetOpticalConfigMethod = ContextServiceGrpc.getGetOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getGetOpticalConfigMethod = getGetOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigList.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalConfig")).build();
+                }
+            }
+        }
+        return getGetOpticalConfigMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getSetOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SetOpticalConfig", requestType = context.ContextOuterClass.OpticalConfig.class, responseType = context.ContextOuterClass.OpticalConfigId.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getSetOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getSetOpticalConfigMethod;
+        if ((getSetOpticalConfigMethod = ContextServiceGrpc.getSetOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getSetOpticalConfigMethod = ContextServiceGrpc.getSetOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getSetOpticalConfigMethod = getSetOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfig.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigId.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetOpticalConfig")).build();
+                }
+            }
+        }
+        return getSetOpticalConfigMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig> getSelectOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SelectOpticalConfig", requestType = context.ContextOuterClass.OpticalConfigId.class, responseType = context.ContextOuterClass.OpticalConfig.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig> getSelectOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig> getSelectOpticalConfigMethod;
+        if ((getSelectOpticalConfigMethod = ContextServiceGrpc.getSelectOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getSelectOpticalConfigMethod = ContextServiceGrpc.getSelectOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getSelectOpticalConfigMethod = getSelectOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "SelectOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfig.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SelectOpticalConfig")).build();
+                }
+            }
+        }
+        return getSelectOpticalConfigMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty> getSetOpticalLinkMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SetOpticalLink", requestType = context.ContextOuterClass.OpticalLink.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty> getSetOpticalLinkMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty> getSetOpticalLinkMethod;
+        if ((getSetOpticalLinkMethod = ContextServiceGrpc.getSetOpticalLinkMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getSetOpticalLinkMethod = ContextServiceGrpc.getSetOpticalLinkMethod) == null) {
+                    ContextServiceGrpc.getSetOpticalLinkMethod = getSetOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetOpticalLink")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLink.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetOpticalLink")).build();
+                }
+            }
+        }
+        return getSetOpticalLinkMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLink", requestType = context.ContextOuterClass.OpticalLinkId.class, responseType = context.ContextOuterClass.OpticalLink.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
+        if ((getGetOpticalLinkMethod = ContextServiceGrpc.getGetOpticalLinkMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getGetOpticalLinkMethod = ContextServiceGrpc.getGetOpticalLinkMethod) == null) {
+                    ContextServiceGrpc.getGetOpticalLinkMethod = getGetOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLink")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLinkId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLink.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLink")).build();
+                }
+            }
+        }
+        return getGetOpticalLinkMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetFiber", requestType = context.ContextOuterClass.FiberId.class, responseType = context.ContextOuterClass.Fiber.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod;
+        if ((getGetFiberMethod = ContextServiceGrpc.getGetFiberMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getGetFiberMethod = ContextServiceGrpc.getGetFiberMethod) == null) {
+                    ContextServiceGrpc.getGetFiberMethod = getGetFiberMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetFiber")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.FiberId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Fiber.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetFiber")).build();
+                }
+            }
+        }
+        return getGetFiberMethod;
+    }
+
     /**
      * Creates a new async stub that supports all call types for the service
      */
@@ -1088,6 +1178,45 @@ public final class ContextServiceGrpc {
         default void getConnectionEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetConnectionEventsMethod(), responseObserver);
         }
+
+        /**
+         * <pre>
+         * ------------------------------ Experimental -----------------------------
+         * </pre>
+         */
+        default void getOpticalConfig(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigList> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalConfigMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void setOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetOpticalConfigMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectOpticalConfigMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetOpticalLinkMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void getOpticalLink(context.ContextOuterClass.OpticalLinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalLinkMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void getFiber(context.ContextOuterClass.FiberId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetFiberMethod(), responseObserver);
+        }
     }
 
     /**
@@ -1408,6 +1537,45 @@ public final class ContextServiceGrpc {
         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);
         }
+
+        /**
+         * <pre>
+         * ------------------------------ Experimental -----------------------------
+         * </pre>
+         */
+        public void getOpticalConfig(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigList> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void setOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSetOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSelectOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSetOpticalLinkMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void getOpticalLink(context.ContextOuterClass.OpticalLinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetOpticalLinkMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void getFiber(context.ContextOuterClass.FiberId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetFiberMethod(), getCallOptions()), request, responseObserver);
+        }
     }
 
     /**
@@ -1717,6 +1885,45 @@ public final class ContextServiceGrpc {
         public java.util.Iterator<context.ContextOuterClass.ConnectionEvent> getConnectionEvents(context.ContextOuterClass.Empty request) {
             return io.grpc.stub.ClientCalls.blockingServerStreamingCall(getChannel(), getGetConnectionEventsMethod(), getCallOptions(), request);
         }
+
+        /**
+         * <pre>
+         * ------------------------------ Experimental -----------------------------
+         * </pre>
+         */
+        public context.ContextOuterClass.OpticalConfigList getOpticalConfig(context.ContextOuterClass.Empty request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetOpticalConfigMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.OpticalConfigId setOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSetOpticalConfigMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.OpticalConfig selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSelectOpticalConfigMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.Empty setOpticalLink(context.ContextOuterClass.OpticalLink request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSetOpticalLinkMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.OpticalLink getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetOpticalLinkMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.Fiber getFiber(context.ContextOuterClass.FiberId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetFiberMethod(), getCallOptions(), request);
+        }
     }
 
     /**
@@ -1984,6 +2191,45 @@ public final class ContextServiceGrpc {
         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);
         }
+
+        /**
+         * <pre>
+         * ------------------------------ Experimental -----------------------------
+         * </pre>
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfigList> getOpticalConfig(context.ContextOuterClass.Empty request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetOpticalConfigMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSetOpticalConfigMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSelectOpticalConfigMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSetOpticalLinkMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetOpticalLinkMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetFiberMethod(), getCallOptions()), request);
+        }
     }
 
     private static final int METHODID_LIST_CONTEXT_IDS = 0;
@@ -2084,6 +2330,18 @@ public final class ContextServiceGrpc {
 
     private static final int METHODID_GET_CONNECTION_EVENTS = 48;
 
+    private static final int METHODID_GET_OPTICAL_CONFIG = 49;
+
+    private static final int METHODID_SET_OPTICAL_CONFIG = 50;
+
+    private static final int METHODID_SELECT_OPTICAL_CONFIG = 51;
+
+    private static final int METHODID_SET_OPTICAL_LINK = 52;
+
+    private static final int METHODID_GET_OPTICAL_LINK = 53;
+
+    private static final int METHODID_GET_FIBER = 54;
+
     private static final class MethodHandlers<Req, Resp> implements io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>, io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>, io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>, io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
 
         private final AsyncService serviceImpl;
@@ -2246,6 +2504,24 @@ public final class ContextServiceGrpc {
                 case METHODID_GET_CONNECTION_EVENTS:
                     serviceImpl.getConnectionEvents((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent>) responseObserver);
                     break;
+                case METHODID_GET_OPTICAL_CONFIG:
+                    serviceImpl.getOpticalConfig((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigList>) responseObserver);
+                    break;
+                case METHODID_SET_OPTICAL_CONFIG:
+                    serviceImpl.setOpticalConfig((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver);
+                    break;
+                case METHODID_SELECT_OPTICAL_CONFIG:
+                    serviceImpl.selectOpticalConfig((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig>) responseObserver);
+                    break;
+                case METHODID_SET_OPTICAL_LINK:
+                    serviceImpl.setOpticalLink((context.ContextOuterClass.OpticalLink) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
+                case METHODID_GET_OPTICAL_LINK:
+                    serviceImpl.getOpticalLink((context.ContextOuterClass.OpticalLinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver);
+                    break;
+                case METHODID_GET_FIBER:
+                    serviceImpl.getFiber((context.ContextOuterClass.FiberId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber>) responseObserver);
+                    break;
                 default:
                     throw new AssertionError();
             }
@@ -2262,7 +2538,7 @@ public final class ContextServiceGrpc {
     }
 
     public static io.grpc.ServerServiceDefinition bindService(AsyncService service) {
-        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getListContextIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(service, METHODID_LIST_CONTEXT_IDS))).addMethod(getListContextsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(service, METHODID_LIST_CONTEXTS))).addMethod(getGetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(service, METHODID_GET_CONTEXT))).addMethod(getSetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(service, METHODID_SET_CONTEXT))).addMethod(getRemoveContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONTEXT))).addMethod(getGetContextEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(service, METHODID_GET_CONTEXT_EVENTS))).addMethod(getListTopologyIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(service, METHODID_LIST_TOPOLOGY_IDS))).addMethod(getListTopologiesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(service, METHODID_LIST_TOPOLOGIES))).addMethod(getGetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(service, METHODID_GET_TOPOLOGY))).addMethod(getGetTopologyDetailsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(service, METHODID_GET_TOPOLOGY_DETAILS))).addMethod(getSetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(service, METHODID_SET_TOPOLOGY))).addMethod(getRemoveTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_TOPOLOGY))).addMethod(getGetTopologyEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(service, METHODID_GET_TOPOLOGY_EVENTS))).addMethod(getListDeviceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(service, METHODID_LIST_DEVICE_IDS))).addMethod(getListDevicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(service, METHODID_LIST_DEVICES))).addMethod(getGetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(service, METHODID_GET_DEVICE))).addMethod(getSetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_SET_DEVICE))).addMethod(getRemoveDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_DEVICE))).addMethod(getGetDeviceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(service, METHODID_GET_DEVICE_EVENTS))).addMethod(getSelectDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(service, METHODID_SELECT_DEVICE))).addMethod(getListEndPointNamesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(service, METHODID_LIST_END_POINT_NAMES))).addMethod(getListLinkIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(service, METHODID_LIST_LINK_IDS))).addMethod(getListLinksMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(service, METHODID_LIST_LINKS))).addMethod(getGetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(service, METHODID_GET_LINK))).addMethod(getSetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(service, METHODID_SET_LINK))).addMethod(getRemoveLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_LINK))).addMethod(getGetLinkEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(service, METHODID_GET_LINK_EVENTS))).addMethod(getListServiceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(service, METHODID_LIST_SERVICE_IDS))).addMethod(getListServicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(service, METHODID_LIST_SERVICES))).addMethod(getGetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(service, METHODID_GET_SERVICE))).addMethod(getSetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_SET_SERVICE))).addMethod(getUnsetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_UNSET_SERVICE))).addMethod(getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SERVICE))).addMethod(getGetServiceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(service, METHODID_GET_SERVICE_EVENTS))).addMethod(getSelectServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(service, METHODID_SELECT_SERVICE))).addMethod(getListSliceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(service, METHODID_LIST_SLICE_IDS))).addMethod(getListSlicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(service, METHODID_LIST_SLICES))).addMethod(getGetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(service, METHODID_GET_SLICE))).addMethod(getSetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_SET_SLICE))).addMethod(getUnsetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_UNSET_SLICE))).addMethod(getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SLICE))).addMethod(getGetSliceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(service, METHODID_GET_SLICE_EVENTS))).addMethod(getSelectSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(service, METHODID_SELECT_SLICE))).addMethod(getListConnectionIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(service, METHODID_LIST_CONNECTION_IDS))).addMethod(getListConnectionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(service, METHODID_LIST_CONNECTIONS))).addMethod(getGetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(service, METHODID_GET_CONNECTION))).addMethod(getSetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(service, METHODID_SET_CONNECTION))).addMethod(getRemoveConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONNECTION))).addMethod(getGetConnectionEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(service, METHODID_GET_CONNECTION_EVENTS))).build();
+        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getListContextIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(service, METHODID_LIST_CONTEXT_IDS))).addMethod(getListContextsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(service, METHODID_LIST_CONTEXTS))).addMethod(getGetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(service, METHODID_GET_CONTEXT))).addMethod(getSetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(service, METHODID_SET_CONTEXT))).addMethod(getRemoveContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONTEXT))).addMethod(getGetContextEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(service, METHODID_GET_CONTEXT_EVENTS))).addMethod(getListTopologyIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(service, METHODID_LIST_TOPOLOGY_IDS))).addMethod(getListTopologiesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(service, METHODID_LIST_TOPOLOGIES))).addMethod(getGetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(service, METHODID_GET_TOPOLOGY))).addMethod(getGetTopologyDetailsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(service, METHODID_GET_TOPOLOGY_DETAILS))).addMethod(getSetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(service, METHODID_SET_TOPOLOGY))).addMethod(getRemoveTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_TOPOLOGY))).addMethod(getGetTopologyEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(service, METHODID_GET_TOPOLOGY_EVENTS))).addMethod(getListDeviceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(service, METHODID_LIST_DEVICE_IDS))).addMethod(getListDevicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(service, METHODID_LIST_DEVICES))).addMethod(getGetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(service, METHODID_GET_DEVICE))).addMethod(getSetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_SET_DEVICE))).addMethod(getRemoveDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_DEVICE))).addMethod(getGetDeviceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(service, METHODID_GET_DEVICE_EVENTS))).addMethod(getSelectDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(service, METHODID_SELECT_DEVICE))).addMethod(getListEndPointNamesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(service, METHODID_LIST_END_POINT_NAMES))).addMethod(getListLinkIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(service, METHODID_LIST_LINK_IDS))).addMethod(getListLinksMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(service, METHODID_LIST_LINKS))).addMethod(getGetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(service, METHODID_GET_LINK))).addMethod(getSetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(service, METHODID_SET_LINK))).addMethod(getRemoveLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_LINK))).addMethod(getGetLinkEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(service, METHODID_GET_LINK_EVENTS))).addMethod(getListServiceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(service, METHODID_LIST_SERVICE_IDS))).addMethod(getListServicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(service, METHODID_LIST_SERVICES))).addMethod(getGetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(service, METHODID_GET_SERVICE))).addMethod(getSetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_SET_SERVICE))).addMethod(getUnsetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_UNSET_SERVICE))).addMethod(getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SERVICE))).addMethod(getGetServiceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(service, METHODID_GET_SERVICE_EVENTS))).addMethod(getSelectServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(service, METHODID_SELECT_SERVICE))).addMethod(getListSliceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(service, METHODID_LIST_SLICE_IDS))).addMethod(getListSlicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(service, METHODID_LIST_SLICES))).addMethod(getGetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(service, METHODID_GET_SLICE))).addMethod(getSetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_SET_SLICE))).addMethod(getUnsetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_UNSET_SLICE))).addMethod(getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SLICE))).addMethod(getGetSliceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(service, METHODID_GET_SLICE_EVENTS))).addMethod(getSelectSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(service, METHODID_SELECT_SLICE))).addMethod(getListConnectionIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(service, METHODID_LIST_CONNECTION_IDS))).addMethod(getListConnectionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(service, METHODID_LIST_CONNECTIONS))).addMethod(getGetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(service, METHODID_GET_CONNECTION))).addMethod(getSetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(service, METHODID_SET_CONNECTION))).addMethod(getRemoveConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONNECTION))).addMethod(getGetConnectionEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(service, METHODID_GET_CONNECTION_EVENTS))).addMethod(getGetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(service, METHODID_GET_OPTICAL_CONFIG))).addMethod(getSetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(service, METHODID_SET_OPTICAL_CONFIG))).addMethod(getSelectOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(service, METHODID_SELECT_OPTICAL_CONFIG))).addMethod(getSetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(service, METHODID_SET_OPTICAL_LINK))).addMethod(getGetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>(service, METHODID_GET_OPTICAL_LINK))).addMethod(getGetFiberMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>(service, METHODID_GET_FIBER))).build();
     }
 
     private static abstract class ContextServiceBaseDescriptorSupplier implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
@@ -2309,7 +2585,7 @@ public final class ContextServiceGrpc {
             synchronized (ContextServiceGrpc.class) {
                 result = serviceDescriptor;
                 if (result == null) {
-                    serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME).setSchemaDescriptor(new ContextServiceFileDescriptorSupplier()).addMethod(getListContextIdsMethod()).addMethod(getListContextsMethod()).addMethod(getGetContextMethod()).addMethod(getSetContextMethod()).addMethod(getRemoveContextMethod()).addMethod(getGetContextEventsMethod()).addMethod(getListTopologyIdsMethod()).addMethod(getListTopologiesMethod()).addMethod(getGetTopologyMethod()).addMethod(getGetTopologyDetailsMethod()).addMethod(getSetTopologyMethod()).addMethod(getRemoveTopologyMethod()).addMethod(getGetTopologyEventsMethod()).addMethod(getListDeviceIdsMethod()).addMethod(getListDevicesMethod()).addMethod(getGetDeviceMethod()).addMethod(getSetDeviceMethod()).addMethod(getRemoveDeviceMethod()).addMethod(getGetDeviceEventsMethod()).addMethod(getSelectDeviceMethod()).addMethod(getListEndPointNamesMethod()).addMethod(getListLinkIdsMethod()).addMethod(getListLinksMethod()).addMethod(getGetLinkMethod()).addMethod(getSetLinkMethod()).addMethod(getRemoveLinkMethod()).addMethod(getGetLinkEventsMethod()).addMethod(getListServiceIdsMethod()).addMethod(getListServicesMethod()).addMethod(getGetServiceMethod()).addMethod(getSetServiceMethod()).addMethod(getUnsetServiceMethod()).addMethod(getRemoveServiceMethod()).addMethod(getGetServiceEventsMethod()).addMethod(getSelectServiceMethod()).addMethod(getListSliceIdsMethod()).addMethod(getListSlicesMethod()).addMethod(getGetSliceMethod()).addMethod(getSetSliceMethod()).addMethod(getUnsetSliceMethod()).addMethod(getRemoveSliceMethod()).addMethod(getGetSliceEventsMethod()).addMethod(getSelectSliceMethod()).addMethod(getListConnectionIdsMethod()).addMethod(getListConnectionsMethod()).addMethod(getGetConnectionMethod()).addMethod(getSetConnectionMethod()).addMethod(getRemoveConnectionMethod()).addMethod(getGetConnectionEventsMethod()).build();
+                    serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME).setSchemaDescriptor(new ContextServiceFileDescriptorSupplier()).addMethod(getListContextIdsMethod()).addMethod(getListContextsMethod()).addMethod(getGetContextMethod()).addMethod(getSetContextMethod()).addMethod(getRemoveContextMethod()).addMethod(getGetContextEventsMethod()).addMethod(getListTopologyIdsMethod()).addMethod(getListTopologiesMethod()).addMethod(getGetTopologyMethod()).addMethod(getGetTopologyDetailsMethod()).addMethod(getSetTopologyMethod()).addMethod(getRemoveTopologyMethod()).addMethod(getGetTopologyEventsMethod()).addMethod(getListDeviceIdsMethod()).addMethod(getListDevicesMethod()).addMethod(getGetDeviceMethod()).addMethod(getSetDeviceMethod()).addMethod(getRemoveDeviceMethod()).addMethod(getGetDeviceEventsMethod()).addMethod(getSelectDeviceMethod()).addMethod(getListEndPointNamesMethod()).addMethod(getListLinkIdsMethod()).addMethod(getListLinksMethod()).addMethod(getGetLinkMethod()).addMethod(getSetLinkMethod()).addMethod(getRemoveLinkMethod()).addMethod(getGetLinkEventsMethod()).addMethod(getListServiceIdsMethod()).addMethod(getListServicesMethod()).addMethod(getGetServiceMethod()).addMethod(getSetServiceMethod()).addMethod(getUnsetServiceMethod()).addMethod(getRemoveServiceMethod()).addMethod(getGetServiceEventsMethod()).addMethod(getSelectServiceMethod()).addMethod(getListSliceIdsMethod()).addMethod(getListSlicesMethod()).addMethod(getGetSliceMethod()).addMethod(getSetSliceMethod()).addMethod(getUnsetSliceMethod()).addMethod(getRemoveSliceMethod()).addMethod(getGetSliceEventsMethod()).addMethod(getSelectSliceMethod()).addMethod(getListConnectionIdsMethod()).addMethod(getListConnectionsMethod()).addMethod(getGetConnectionMethod()).addMethod(getSetConnectionMethod()).addMethod(getRemoveConnectionMethod()).addMethod(getGetConnectionEventsMethod()).addMethod(getGetOpticalConfigMethod()).addMethod(getSetOpticalConfigMethod()).addMethod(getSelectOpticalConfigMethod()).addMethod(getSetOpticalLinkMethod()).addMethod(getGetOpticalLinkMethod()).addMethod(getGetFiberMethod()).build();
                 }
             }
         }
diff --git a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
index 247bf18aeacccd7e85733d56585722094b019915..c6dbb1e92554dea8ee8d25b01bf87dd2cfa32551 100644
--- a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -203,6 +203,35 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::removeConnection);
         }
 
+        /**
+         * <pre>
+         *  ------------------------------ Experimental -----------------------------
+         * </pre>
+         */
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigList> getOpticalConfig(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getOpticalConfig);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::setOpticalConfig);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::selectOpticalConfig);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::setOpticalLink);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getOpticalLink);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getFiber);
+        }
+
         public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToMany(request, delegateStub::getContextEvents);
         }
@@ -414,6 +443,35 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        /**
+         * <pre>
+         *  ------------------------------ Experimental -----------------------------
+         * </pre>
+         */
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigList> getOpticalConfig(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId 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);
         }
@@ -444,7 +502,7 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
 
         @java.lang.Override
         public io.grpc.ServerServiceDefinition bindService() {
-            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(context.ContextServiceGrpc.getListContextIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(this, METHODID_LIST_CONTEXT_IDS, compression))).addMethod(context.ContextServiceGrpc.getListContextsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(this, METHODID_LIST_CONTEXTS, compression))).addMethod(context.ContextServiceGrpc.getGetContextMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(this, METHODID_GET_CONTEXT, compression))).addMethod(context.ContextServiceGrpc.getSetContextMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(this, METHODID_SET_CONTEXT, compression))).addMethod(context.ContextServiceGrpc.getRemoveContextMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONTEXT, compression))).addMethod(context.ContextServiceGrpc.getGetContextEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(this, METHODID_GET_CONTEXT_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getListTopologyIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(this, METHODID_LIST_TOPOLOGY_IDS, compression))).addMethod(context.ContextServiceGrpc.getListTopologiesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(this, METHODID_LIST_TOPOLOGIES, compression))).addMethod(context.ContextServiceGrpc.getGetTopologyMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(this, METHODID_GET_TOPOLOGY, compression))).addMethod(context.ContextServiceGrpc.getGetTopologyDetailsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS, compression))).addMethod(context.ContextServiceGrpc.getSetTopologyMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(this, METHODID_SET_TOPOLOGY, compression))).addMethod(context.ContextServiceGrpc.getRemoveTopologyMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_TOPOLOGY, compression))).addMethod(context.ContextServiceGrpc.getGetTopologyEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(this, METHODID_GET_TOPOLOGY_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getListDeviceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(this, METHODID_LIST_DEVICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListDevicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(this, METHODID_LIST_DEVICES, compression))).addMethod(context.ContextServiceGrpc.getGetDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(this, METHODID_GET_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getSetDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(this, METHODID_SET_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getGetDeviceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(this, METHODID_GET_DEVICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getListEndPointNamesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES, compression))).addMethod(context.ContextServiceGrpc.getListLinkIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(this, METHODID_LIST_LINK_IDS, compression))).addMethod(context.ContextServiceGrpc.getListLinksMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(this, METHODID_LIST_LINKS, compression))).addMethod(context.ContextServiceGrpc.getGetLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(this, METHODID_GET_LINK, compression))).addMethod(context.ContextServiceGrpc.getSetLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(this, METHODID_SET_LINK, compression))).addMethod(context.ContextServiceGrpc.getRemoveLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetLinkEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(this, METHODID_GET_LINK_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getListServiceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(this, METHODID_LIST_SERVICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListServicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(this, METHODID_LIST_SERVICES, compression))).addMethod(context.ContextServiceGrpc.getGetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(this, METHODID_GET_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getSetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_SET_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getGetServiceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(this, METHODID_GET_SERVICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getListSliceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListSlicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES, compression))).addMethod(context.ContextServiceGrpc.getGetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getSetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE, compression))).addMethod(context.ContextServiceGrpc.getGetSliceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE, 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();
+            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(context.ContextServiceGrpc.getListContextIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(this, METHODID_LIST_CONTEXT_IDS, compression))).addMethod(context.ContextServiceGrpc.getListContextsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(this, METHODID_LIST_CONTEXTS, compression))).addMethod(context.ContextServiceGrpc.getGetContextMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(this, METHODID_GET_CONTEXT, compression))).addMethod(context.ContextServiceGrpc.getSetContextMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(this, METHODID_SET_CONTEXT, compression))).addMethod(context.ContextServiceGrpc.getRemoveContextMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONTEXT, compression))).addMethod(context.ContextServiceGrpc.getGetContextEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(this, METHODID_GET_CONTEXT_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getListTopologyIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(this, METHODID_LIST_TOPOLOGY_IDS, compression))).addMethod(context.ContextServiceGrpc.getListTopologiesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(this, METHODID_LIST_TOPOLOGIES, compression))).addMethod(context.ContextServiceGrpc.getGetTopologyMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(this, METHODID_GET_TOPOLOGY, compression))).addMethod(context.ContextServiceGrpc.getGetTopologyDetailsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS, compression))).addMethod(context.ContextServiceGrpc.getSetTopologyMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(this, METHODID_SET_TOPOLOGY, compression))).addMethod(context.ContextServiceGrpc.getRemoveTopologyMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_TOPOLOGY, compression))).addMethod(context.ContextServiceGrpc.getGetTopologyEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(this, METHODID_GET_TOPOLOGY_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getListDeviceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(this, METHODID_LIST_DEVICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListDevicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(this, METHODID_LIST_DEVICES, compression))).addMethod(context.ContextServiceGrpc.getGetDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(this, METHODID_GET_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getSetDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(this, METHODID_SET_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getGetDeviceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(this, METHODID_GET_DEVICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getListEndPointNamesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES, compression))).addMethod(context.ContextServiceGrpc.getListLinkIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(this, METHODID_LIST_LINK_IDS, compression))).addMethod(context.ContextServiceGrpc.getListLinksMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(this, METHODID_LIST_LINKS, compression))).addMethod(context.ContextServiceGrpc.getGetLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(this, METHODID_GET_LINK, compression))).addMethod(context.ContextServiceGrpc.getSetLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(this, METHODID_SET_LINK, compression))).addMethod(context.ContextServiceGrpc.getRemoveLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetLinkEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(this, METHODID_GET_LINK_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getListServiceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(this, METHODID_LIST_SERVICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListServicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(this, METHODID_LIST_SERVICES, compression))).addMethod(context.ContextServiceGrpc.getGetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(this, METHODID_GET_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getSetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_SET_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getGetServiceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(this, METHODID_GET_SERVICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getListSliceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListSlicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES, compression))).addMethod(context.ContextServiceGrpc.getGetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getSetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE, compression))).addMethod(context.ContextServiceGrpc.getGetSliceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE, 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))).addMethod(context.ContextServiceGrpc.getGetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(this, METHODID_GET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_SET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSelectOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(this, METHODID_SELECT_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(this, METHODID_SET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>(this, METHODID_GET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetFiberMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>(this, METHODID_GET_FIBER, compression))).build();
         }
     }
 
@@ -546,6 +604,18 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
 
     private static final int METHODID_GET_CONNECTION_EVENTS = 48;
 
+    private static final int METHODID_GET_OPTICAL_CONFIG = 49;
+
+    private static final int METHODID_SET_OPTICAL_CONFIG = 50;
+
+    private static final int METHODID_SELECT_OPTICAL_CONFIG = 51;
+
+    private static final int METHODID_SET_OPTICAL_LINK = 52;
+
+    private static final int METHODID_GET_OPTICAL_LINK = 53;
+
+    private static final int METHODID_GET_FIBER = 54;
+
     private static final class MethodHandlers<Req, Resp> implements io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>, io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>, io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>, io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
 
         private final ContextServiceImplBase serviceImpl;
@@ -711,6 +781,24 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
                 case METHODID_GET_CONNECTION_EVENTS:
                     io.quarkus.grpc.stubs.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent>) responseObserver, compression, serviceImpl::getConnectionEvents);
                     break;
+                case METHODID_GET_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigList>) responseObserver, compression, serviceImpl::getOpticalConfig);
+                    break;
+                case METHODID_SET_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver, compression, serviceImpl::setOpticalConfig);
+                    break;
+                case METHODID_SELECT_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig>) responseObserver, compression, serviceImpl::selectOpticalConfig);
+                    break;
+                case METHODID_SET_OPTICAL_LINK:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalLink) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::setOpticalLink);
+                    break;
+                case METHODID_GET_OPTICAL_LINK:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalLinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver, compression, serviceImpl::getOpticalLink);
+                    break;
+                case METHODID_GET_FIBER:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.FiberId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber>) responseObserver, compression, serviceImpl::getFiber);
+                    break;
                 default:
                     throw new java.lang.AssertionError();
             }
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index 634c1516317426ef64979524f7a48c32899bdf0b..4f581f0c9225dd8772dd476b133ba04880683851 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,8 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: aa8541cd42120ff91ef0573b05beb1e1d0861617
-    app.quarkus.io/build-timestamp: 2024-02-15 - 09:57:46 +0000
+    app.quarkus.io/commit-id: 182b55a46135040b71a5980de9f72d94a85db2e8
+    app.quarkus.io/build-timestamp: 2024-04-08 - 08:15:43 +0000
     prometheus.io/scrape: "true"
     prometheus.io/path: /q/metrics
     prometheus.io/port: "8080"
@@ -21,14 +21,14 @@ spec:
       port: 443
       protocol: TCP
       targetPort: 8443
-    - name: http
-      port: 9192
-      protocol: TCP
-      targetPort: 8080
     - name: grpc
       port: 6060
       protocol: TCP
       targetPort: 6060
+    - name: http
+      port: 9192
+      protocol: TCP
+      targetPort: 8080
   selector:
     app.kubernetes.io/name: policyservice
   type: ClusterIP
@@ -37,8 +37,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: aa8541cd42120ff91ef0573b05beb1e1d0861617
-    app.quarkus.io/build-timestamp: 2024-02-15 - 09:57:46 +0000
+    app.quarkus.io/commit-id: 182b55a46135040b71a5980de9f72d94a85db2e8
+    app.quarkus.io/build-timestamp: 2024-04-08 - 08:15:43 +0000
     prometheus.io/scrape: "true"
     prometheus.io/path: /q/metrics
     prometheus.io/port: "8080"
@@ -57,8 +57,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: aa8541cd42120ff91ef0573b05beb1e1d0861617
-        app.quarkus.io/build-timestamp: 2024-02-15 - 09:57:46 +0000
+        app.quarkus.io/commit-id: 182b55a46135040b71a5980de9f72d94a85db2e8
+        app.quarkus.io/build-timestamp: 2024-04-08 - 08:15:43 +0000
         prometheus.io/scrape: "true"
         prometheus.io/path: /q/metrics
         prometheus.io/port: "8080"
@@ -75,12 +75,12 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-            - name: CONTEXT_SERVICE_HOST
-              value: contextservice
             - name: SERVICE_SERVICE_HOST
               value: serviceservice
             - name: MONITORING_SERVICE_HOST
               value: monitoringservice
+            - name: CONTEXT_SERVICE_HOST
+              value: contextservice
           image: labs.etsi.org:5050/tfs/controller/policy:0.1.0
           imagePullPolicy: Always
           livenessProbe:
@@ -98,12 +98,12 @@ spec:
             - containerPort: 8443
               name: https
               protocol: TCP
-            - containerPort: 8080
-              name: http
-              protocol: TCP
             - containerPort: 6060
               name: grpc
               protocol: TCP
+            - containerPort: 8080
+              name: http
+              protocol: TCP
           readinessProbe:
             failureThreshold: 3
             httpGet: