--- /dev/null
+#!/bin/bash
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END============================================
+#
+
+ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
+CM_VERSION="v0.16.1"
+CM_PORT="8879"
+HELM_LOCAL_REPO="$ROOT_DIR/chartstorage"
+
+echo "Installing ChartMuseum binary..."
+pushd /tmp
+wget https://get.helm.sh/chartmuseum-$CM_VERSION-linux-amd64.tar.gz
+tar xvfz chartmuseum-$CM_VERSION-linux-amd64.tar.gz
+sudo mv /tmp/linux-amd64/chartmuseum /usr/local/bin/chartmuseum
+popd
+
+echo "Starting ChartMuseum on port $CM_PORT..."
+nohup chartmuseum --port=$CM_PORT --storage="local" --storage-local-rootdir=$HELM_LOCAL_REPO >/dev/null 2>&1 &
+echo $! > $ROOT_DIR/CM_PID.txt
+
+wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
+tar xvfz /tmp/helm-v3.12.3-linux-amd64.tar.gz
+sudo mv linux-amd64/helm /usr/local/bin/helm
+
+TAR_VERSION=v0.10.3
+echo "Downloading and installing helm-push ${TAR_VERSION} ..."
+TAR_FILE=helm-push-${TAR_VERSION}.tar.gz
+HELM_PLUGINS=$(helm env HELM_PLUGINS)
+mkdir -p $HELM_PLUGINS/helm-push
+cd $HELM_PLUGINS/helm-push
+wget https://nexus.o-ran-sc.org/content/repositories/thirdparty/chartmuseum/helm-push/$TAR_VERSION/$TAR_FILE
+tar zxvf $TAR_FILE >/dev/null
+rm $TAR_FILE
+helm repo remove local
+helm repo add local http://localhost:8879
+popd
+
+sudo apt-get install make -y
+(cd smo && make all)
+
+# Creating namespace
+kubectl create ns smo
+
+# Installing helm charts
+helm install --debug oran-smo local/smo --namespace smo
+
+# Show the installed pods
+kubectl get po -n smo
\ No newline at end of file
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+apiVersion: v2
+name: smo
+version: 1.0.0
+appVersion: test
+description: Open Radio Access Network (ORAN)
+kubeVersion: ">=1.19.0-0"
+
+dependencies:
+ - name: topology-exposure-inventory
+ version: ~1.0.0
+ repository: "@local"
+ condition: smo.installTeiv
--- /dev/null
+# Copyright © 2017 Amdocs, Bell Canada
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+#
+# 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.
+
+PARENT_CHART := smo
+COMMON_CHARTS_DIR := smo-common
+# FIXME OOM-765
+ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+OUTPUT_DIR := $(ROOT_DIR)/dist
+PACKAGE_DIR := $(OUTPUT_DIR)/packages
+SECRET_DIR := $(OUTPUT_DIR)/secrets
+HELM_BIN := helm
+
+# Helm v2 and helm v3 uses different version format so we first try in helm v3 format
+# and if it fails then we fallback to helm v2 one
+HELM_VER := $(shell $(HELM_BIN) version --template "{{.Version}}" 2>/dev/null)
+ifneq "$(findstring v3,$(HELM_VER))" "v3"
+ HELM_VER := $(shell $(HELM_BIN) version -c --template "{{.Client.SemVer}}")
+endif
+
+# use this if you would like to cm-push onap charts to repo with other name
+# WARNING: Helm v3+ only
+# WARNING: Make sure to edit also requirements files
+HELM_REPO := local
+
+ifneq ($(SKIP_LINT),TRUE)
+ HELM_LINT_CMD := $(HELM_BIN) lint
+else
+ HELM_LINT_CMD := echo "Skipping linting of"
+endif
+
+#SUBMODS := robot
+#EXCLUDES := config oneclick readiness test dist helm $(PARENT_CHART) dcae $(SUBMODS)
+EXCLUDES := $(PARENT_CHART)
+HELM_CHARTS := $(filter-out $(EXCLUDES), $(sort $(patsubst %/.,%,$(wildcard */.)))) $(PARENT_CHART)
+
+.PHONY: $(EXCLUDES) $(HELM_CHARTS) check-for-staging-images
+
+all: print_helm_bin $(COMMON_CHARTS_DIR) $(SUBMODS) $(HELM_CHARTS) helm-repo-update
+
+$(COMMON_CHARTS):
+ @echo "\n[$@]"
+ @make package-$@
+
+$(HELM_CHARTS):
+ @echo "\n[$@]"
+ @make package-$@
+
+$(SUBMODS):
+ @echo "\n[$@]"
+ @make submod-$@
+ @make package-$@
+
+submod-%:
+ @make $*/Chart.yaml
+
+%/Chart.yaml:
+ $(error Submodule $* needs to be retrieved from gerrit. See https://wiki.onap.org/display/DW/OOM+-+Development+workflow+after+code+transfer+to+tech+teams ); fi
+
+print_helm_bin:
+ $(info Using Helm binary ${HELM_BIN} which is helm version ${HELM_VER})
+
+make-%:
+ @if [ -f $*/Makefile ]; then make -C $*; fi
+
+dep-%: make-%
+ @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) dep up $*; fi
+
+lint-%: dep-%
+ @if [ -f $*/Chart.yaml ]; then $(HELM_LINT_CMD) $*; fi
+
+package-%: lint-%
+ @mkdir -p $(PACKAGE_DIR)
+ifeq "$(findstring v3,$(HELM_VER))" "v3"
+ @if [ -f $*/Chart.yaml ]; then PACKAGE_NAME=$$($(HELM_BIN) package -d $(PACKAGE_DIR) $* | cut -d":" -f2) && $(HELM_BIN) cm-push -f $$PACKAGE_NAME $(HELM_REPO); fi
+else
+ @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) package -d $(PACKAGE_DIR) $*; fi
+ @$(HELM_BIN) repo index $(PACKAGE_DIR)
+endif
+
+clean:
+ @rm -f */Chart.lock
+ @find . -type f -name '*.tgz' -delete
+ @rm -rf $(PACKAGE_DIR)/*
+
+# publish helm plugins via distrubtion directory
+plugins:
+ @cp -R helm $(PACKAGE_DIR)/
+
+# start up a local helm repo to serve up helm chart packages
+# WARNING: Only helm < v3 supported
+repo:
+ @mkdir -p $(PACKAGE_DIR)
+ @$(HELM_BIN) serve --repo-path $(PACKAGE_DIR) &
+ @sleep 3
+ @$(HELM_BIN) repo index $(PACKAGE_DIR)
+ @$(HELM_BIN) repo add local http://127.0.0.1:8879
+
+# stop local helm repo
+# WARNING: Only helm < v3 supported
+repo-stop:
+ @pkill $(HELM_BIN)
+ @$(HELM_BIN) repo remove local
+
+check-for-staging-images:
+ $(ROOT_DIR)/contrib/tools/check-for-staging-images.sh
+
+helm-repo-update:
+ifeq "$(findstring v3,$(HELM_VER))" "v3"
+ @$(HELM_BIN) repo update
+endif
+
+%:
+ @:
--- /dev/null
+################################################################################
+# Copyright (C) 2024 OpenInfra Foundation Europe #
+# #
+# 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. #
+################################################################################
+
+apiVersion: v2
+description: SMO Common templates for inclusion in other charts
+name: smo-common
+version: 1.0.0
--- /dev/null
+{{/*
+################################################################################
+# Copyright (c) 2024 NYCU WINLab. #
+# #
+# 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. #
+################################################################################
+*/}}
+
+{{- define "common.applicationConfigmap" -}}
+{{- $dot := default . .dot -}}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.name" $dot }}-application-configmap
+ namespace: {{ include "common.namespace" . }}
+ labels: {{- include "common.labels" . | nindent 4 }}
+data:
+ application.yaml: |
+ {{- toYaml .Values.application | nindent 4 }}
+{{ end -}}
--- /dev/null
+{{/*
+################################################################################
+# Copyright (c) 2024 NYCU WINLab. #
+# #
+# 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. #
+################################################################################
+*/}}
+{{- define "common.ingressClassName" -}}
+ {{- if and .Values.global .Values.global.ingress -}}
+ {{- default "kong" .Values.global.ingress.ingressClass -}}
+ {{- else -}}
+ {{- print "kong" -}}
+ {{- end -}}
+{{- end -}}
+
+{{- define "common.ingressEnabled" -}}
+ {{- if and .Values.global .Values.global.ingress -}}
+ {{- if .Values.global.ingress.enabled -}}
+ {{- if or .Values.global.ingress.enabled_all .Values.ingress.enabled -}}
+ true
+ {{- end -}}
+ {{- end -}}
+ {{- else -}}
+ {{- .Values.ingress.enabled -}}
+ {{- end -}}
+{{- end -}}
--- /dev/null
+{{/*
+# Copyright © 2019 Orange
+# Modifications Copyright (C) 2022 Bell Canada
+# Modifications Copyright (c) 2024 NYCU WINLab
+#
+# 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.
+*/}}
+
+{{/*
+Common labels
+The function takes several arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .labels : labels to add (dict)
+*/}}
+{{- define "common.labels" -}}
+{{- $dot := default . .dot -}}
+app.kubernetes.io/name: {{ include "common.name" $dot }}
+app.kubernetes.io/version: "{{ (default $dot.Chart.Version $dot.Chart.AppVersion) | replace "+" "_" }}"
+{{- if not .ignoreHelmChart }}
+helm.sh/chart: {{ $dot.Chart.Name }}-{{ $dot.Chart.Version | replace "+" "_" }}
+{{- end }}
+app.kubernetes.io/instance: {{ $dot.Release.Name }}
+app.kubernetes.io/managed-by: {{ $dot.Release.Service }}
+{{- if .labels }}
+{{ include "common.tplValue" (dict "value" .labels "context" $dot) }}
+{{- end }}
+{{- end -}}
+
+{{/*
+Labels to use on deploy.spec.selector.matchLabels and svc.spec.selector
+The function takes several arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .matchLabels: selectors/matchlLabels to add (dict)
+*/}}
+{{- define "common.matchLabels" -}}
+{{- $dot := default . .dot -}}
+{{- $matchLabels := default (dict) .matchLabels -}}
+{{- if not $matchLabels.nameNoMatch -}}
+app.kubernetes.io/name: {{ include "common.name" $dot }}
+{{- end }}
+app.kubernetes.io/instance: {{ include "common.release" $dot }}
+{{- if $matchLabels }}
+{{$_ := unset $matchLabels "nameNoMatch"}}
+{{- include "common.tplValue" (dict "value" $matchLabels "context" $dot) }}
+{{- end }}
+{{- end -}}
+
+{{/*
+ Generate "top" metadata for Deployment / StatefulSet / ...
+ The function takes several arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .labels: labels to add (dict)
+ - .suffix: suffix to name
+
+*/}}
+{{- define "common.resourceMetadata" -}}
+{{- $dot := default . .dot -}}
+{{- $suffix := default "" .suffix -}}
+{{- $labels := default (dict) .labels -}}
+{{- $annotations := default (dict) .annotations -}}
+name: {{ include "common.name" (dict "suffix" $suffix "dot" $dot )}}
+namespace: {{ include "common.namespace" $dot }}
+labels: {{- include "common.labels" (dict "labels" $labels "ignoreHelmChart" .ignoreHelmChart "dot" $dot ) | nindent 2 }}
+{{- if $annotations }}
+annotations: {{- include "common.tplValue" (dict "value" $annotations "context" $dot) | nindent 2}}
+{{- end }}
+{{- end -}}
+
+{{/*
+ Generate selectors for Deployment / StatefulSet / ...
+ The function takes several arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .matchLabels: labels to add (dict)
+*/}}
+{{- define "common.selectors" -}}
+{{- $dot := default . .dot -}}
+{{- $matchLabels := default (dict) .matchLabels -}}
+matchLabels: {{- include "common.matchLabels" (dict "matchLabels" $matchLabels "dot" $dot) | nindent 2 }}
+{{- end -}}
+
+{{/*
+ Generate "template" metadata for Deployment / StatefulSet / ...
+ The function takes several arguments (inside a dictionary)
+ - .dot : environment (.)
+ - .labels: labels to add (dict)
+*/}}
+{{- define "common.templateMetadata" -}}
+{{- $dot := default . .dot -}}
+{{- $labels := default (dict) .labels -}}
+{{- if $dot.Values.podAnnotations -}}
+annotations: {{- include "common.tplValue" (dict "value" $dot.Values.podAnnotations "context" $dot) | nindent 2 }}
+{{ end -}}
+labels: {{- include "common.labels" (dict "labels" $labels "ignoreHelmChart" .ignoreHelmChart "dot" $dot) | nindent 2 }}
+name: {{ include "common.name" $dot }}
+{{- end -}}
--- /dev/null
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+# Modifications Copyright (c) 2024 NYCU WINLab.
+#
+# 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.
+*/}}
+
+{{/*
+ Expand the name of a chart.
+ The function takes from one to two arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .suffix : add a suffix to the name
+*/}}
+{{- define "common.name" -}}
+ {{- $dot := default . .dot -}}
+ {{- $suffix := .suffix -}}
+ {{- default (default $dot.Chart.Name $dot.Values.nameOverride) .nameOverride | trunc 63 | trimSuffix "-" -}}{{ if $suffix }}{{ print "-" $suffix }}{{ end }}
+{{- end -}}
+
+{{- define "common.containername" -}}
+ {{- $name := ( include "common.name" . ) -}}
+ {{- printf "container-%s" $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{- define "common.release" -}}
+{{ .Release.Name }}
+{{- end -}}
--- /dev/null
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# 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.
+*/}}
+
+{{/*
+ Resolve the namespace to apply to a chart. The default namespace suffix
+ is the name of the chart. This can be overridden if necessary (eg. for subcharts)
+ using the following value:
+
+ - .Values.nsPrefix : override namespace prefix
+*/}}
+{{- define "common.namespace" -}}
+ {{- default .Release.Namespace .Values.nsPrefix -}}
+{{- end -}}
--- /dev/null
+{{/*
+################################################################################
+# Copyright (c) 2024 NYCU WINLab. #
+# #
+# 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. #
+################################################################################
+*/}}
+
+{{- define "common.containerPorts" -}}
+{{- $ports := default (list) .Values.service.ports }}
+{{- range $index, $port := $ports }}
+{{- if $port.targetPort -}}
+- containerPort: {{ $port.targetPort }}
+ name: {{ $port.name }}
+{{- if $port.l4_protocol }}
+ protocol: {{ $port.l4_protocol }}
+{{- else }}
+ protocol: TCP
+{{- end }}
+{{- end }}
+{{- if $port.targetPort_tls }}
+- containerPort: {{ $port.targetPort_tls }}
+ name: {{ $port.name_tls }}
+{{- if $port.l4_protocol }}
+ protocol: {{ $port.l4_protocol }}
+{{- else }}
+ protocol: TCP
+{{- end }}
+{{- end }}
+{{- end }}
+{{- end -}}
+
+{{- define "common.probePort" -}}
+{{ default (first .Values.service.ports).targetPort .Values.service.probePort }}
+{{- end -}}
+
+{{- define "common.tcpsocketReadinessProbe" -}}
+{{- $dot := default . .dot -}}
+{{- $port := default (include "common.probePort" $dot) .port -}}
+readinessProbe:
+ tcpSocket:
+ port: {{ $port }}
+ initialDelaySeconds: {{ $dot.Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ $dot.Values.readiness.periodSeconds }}
+{{- end -}}
+
+{{- define "common.tcpsocketLivenessProbe" -}}
+{{- $dot := default . .dot -}}
+{{- $port := default (include "common.probePort" $dot) .port -}}
+livenessProbe:
+ tcpSocket:
+ port: {{ $port }}
+ initialDelaySeconds: {{ $dot.Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ $dot.Values.liveness.periodSeconds }}
+{{- end -}}
+
+{{- define "common.tcpsocketProbes" -}}
+{{- include "common.tcpsocketReadinessProbe" . }}
+{{ include "common.tcpsocketLivenessProbe" . }}
+{{- end -}}
+
+{{- define "common.httpLiveProbe" -}}
+{{- $dot := default . .dot }}
+{{- $path := default "/status" .path -}}
+livenessProbe:
+ httpGet:
+ path: {{ $path }}
+ port: {{ include "common.probePort" . }}
+ initialDelaySeconds: {{ $dot.Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ $dot.Values.liveness.periodSeconds }}
+{{- end -}}
+
+{{- define "common.applicationConfigMountName" -}}
+{{ include "common.name" . }}-application-config
+{{- end -}}
+
+{{- define "common.applicationConfigVolume" -}}
+- name: {{ include "common.name" . }}-application-config
+ configMap:
+ name: {{ include "common.name" . }}-application-configmap
+{{- end -}}
+
--- /dev/null
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+# Modifications Copyright (c) 2024 NYCU WINLab.
+#
+# 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.
+*/}}
+{{/*
+ Resolve the name of a chart's service.
+
+ The default will be the chart name (or .Values.nameOverride if set).
+ And the use of .Values.service.name overrides all.
+
+ - .Values.service.name: override default service (ie. chart) name
+*/}}
+{{/*
+ Expand the service name for a chart.
+*/}}
+{{- define "common.servicename" -}}
+ {{- $name := default .Chart.Name .Values.nameOverride -}}
+ {{- default $name .Values.service.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/* Define the metadata of Service
+ The function takes from one to four arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .suffix : a string which will be added at the end of the name (with a '-').
+ - .annotations: the annotations to add
+ - .labels : labels to add
+ Usage example:
+ {{ include "common.serviceMetadata" ( dict "suffix" "myService" "dot" .) }}
+ {{ include "common.serviceMetadata" ( dict "annotations" .Values.service.annotation "dot" .) }}
+*/}}
+
+{{- define "common.serviceMetadata" -}}
+ {{- $dot := default . .dot -}}
+ {{- $suffix := default "" .suffix -}}
+ {{- $annotations := default "" .annotations -}}
+ {{- $labels := default (dict) .labels -}}
+{{- if $annotations -}}
+annotations:
+{{ include "common.tplValue" (dict "value" $annotations "context" $dot) | indent 2 }}
+{{- end -}}
+name: {{ include "common.servicename" $dot }}{{ if $suffix }}{{ print "-" $suffix }}{{ end }}
+namespace: {{ include "common.namespace" $dot }}
+labels: {{- include "common.labels" (dict "labels" $labels "dot" $dot) | nindent 2 -}}
+{{- end -}}
+
+{{/* Define the ports of Service
+ The function takes three arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .ports : an array of ports
+ - .serviceType: the type of the service
+*/}}
+{{- define "common.servicePorts" -}}
+{{- $serviceType := .serviceType -}}
+{{- $dot := .dot -}}
+{{- range $index, $port := .ports -}}
+{{- if $port.targetPort -}}
+- name: {{ $port.name }}
+ port: {{ default $port.targetPort $port.internalPort }}
+ targetPort: {{ $port.targetPort }}
+{{- if (and (eq $serviceType "NodePort") $port.nodePort) }}
+ nodePort: {{ $port.nodePort }}
+{{- end }}
+{{- if $port.l4_protocol }}
+ protocol: {{ $port.l4_protocol }}
+{{- else }}
+ protocol: TCP
+{{- end }}
+{{- if $port.app_protocol }}
+ appProtocol: {{ $port.app_protocol }}
+{{- end }}
+{{- end }}
+{{- if $port.internalPort_tls }}
+- name: {{ $port.name_tls }}
+ port: {{ default $port.targetPort_tls $port.internalPort_tls }}
+ targetPort: {{ $port.targetPort_tls }}
+{{- if (and (eq $serviceType "NodePort") $port.nodePort_tls) }}
+ nodePort: {{ $port.nodePort_tls }}
+{{- end }}
+{{- if $port.l4_protocol }}
+ protocol: {{ $port.l4_protocol }}
+{{- else }}
+ protocol: TCP
+{{- end }}
+{{- if $port.app_protocol }}
+ appProtocol: {{ $port.app_protocol }}
+{{- end }}
+{{- end }}
+{{ end }}
+{{- end -}}
+
+{{/* Create generic service template
+ The function takes several arguments (inside a dictionary):
+ - .dot : environment (.)
+ - .ports : an array of ports
+ - .serviceType: the type of the service
+ - .suffix : a string which will be added at the end of the name (with a '-')
+ - .annotations: the annotations to add
+ - .publishNotReadyAddresses: if we publish not ready address
+ - .headless: if the service is headless
+ - .add_plain_port: add tls port AND plain port
+ - .labels : labels to add (dict)
+ - .matchLabels: selectors/machLabels to add (dict)
+*/}}
+{{- define "common.service" -}}
+{{- $dot := default . .dot -}}
+{{- $suffix := default "" $dot.Values.service.suffix -}}
+{{- $annotations := default "" $dot.Values.service.annotations -}}
+{{- $publishNotReadyAddresses := default false $dot.Values.service.publishNotReadyAddresses -}}
+{{- $serviceType := $dot.Values.service.type -}}
+{{- $ports := $dot.Values.service.ports -}}
+{{- $labels := default (dict) .labels -}}
+{{- $matchLabels := default (dict) .matchLabels -}}
+{{- $ipFamilyPolicy := default "PreferDualStack" $dot.Values.service.ipFamilyPolicy -}}
+apiVersion: v1
+kind: Service
+metadata: {{- include "common.serviceMetadata" (dict "suffix" $suffix "annotations" $annotations "labels" $labels "dot" $dot) | nindent 2 }}
+spec:
+ ports: {{- include "common.servicePorts" (dict "serviceType" $serviceType "ports" $ports "dot" $dot) | nindent 4 }}
+ ipFamilyPolicy: {{ $ipFamilyPolicy }}
+ {{- if $publishNotReadyAddresses }}
+ publishNotReadyAddresses: true
+ {{- end }}
+ type: {{ $serviceType }}
+ selector: {{- include "common.matchLabels" (dict "matchLabels" $matchLabels "dot" $dot) | nindent 4 }}
+{{- end -}}
--- /dev/null
+{{/*
+################################################################################
+# Copyright (c) 2024 NYCU WINLab. #
+# #
+# 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. #
+################################################################################
+*/}}
+
+{{- define "common.vardataVolumeClaimTemplate" -}}
+- metadata:
+ name: {{ include "common.name" . }}-vardata
+ spec:
+ accessModes: [ ReadWriteOnce ]
+ storageClassName: "{{ .Values.persistence.storageClassName }}"
+ resources:
+ requests:
+ storage: "{{ .Values.persistence.size }}"
+{{- end -}}
+
+{{- define "common.vardataMountName" -}}
+{{ include "common.name" . }}-vardata
+{{- end -}}
--- /dev/null
+{{/*
+# Copyright © 2019 Orange
+#
+# 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.
+*/}}
+
+{{/*
+Renders a value that contains template.
+Usage:
+{{ include "common.tplValue" ( dict "value" .Values.path.to.the.Value "context" $) }}
+*/}}
+{{- define "common.tplValue" -}}
+ {{- if typeIs "string" .value }}
+ {{- tpl .value .context }}
+ {{- else }}
+ {{- tpl (.value | toYaml) .context }}
+ {{- end }}
+{{- end -}}
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+apiVersion: v2
+name: smo
+version: 1.0.0
+appVersion: test
+description: Open Radio Access Network (ORAN)
+kubeVersion: ">=1.19.0-0"
+
+dependencies:
+ - name: topology-exposure-inventory
+ version: ~1.0.0
+ repository: "@local"
+ condition: smo.installTeiv
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+kind: PersistentVolume
+apiVersion: v1
+metadata:
+ name: kafka-volume-1
+ namespace: {{ include "common.namespace" . }}
+spec:
+ capacity:
+ storage: {{ .Values.smo.kafkavolume.size}}
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ persistentVolumeReclaimPolicy: Retain
+ hostPath:
+ path: {{ .Values.smo.persistence.mountPath }}/smo/kafka-volume
+ storageClassName: {{ .Values.smo.kafkavolume.storageClassName }}
+---
+kind: PersistentVolume
+apiVersion: v1
+metadata:
+ name: kafka-volume-2
+ namespace: {{ include "common.namespace" . }}
+spec:
+ capacity:
+ storage: {{ .Values.smo.kafkavolume.size}}
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ persistentVolumeReclaimPolicy: Retain
+ hostPath:
+ path: {{ .Values.smo.persistence.mountPath }}/smo/kafka-volume
+ storageClassName: {{ .Values.smo.kafkavolume.storageClassName }}
+---
+kind: PersistentVolume
+apiVersion: v1
+metadata:
+ name: kafka-volume-3
+ namespace: {{ include "common.namespace" . }}
+spec:
+ capacity:
+ storage: {{ .Values.smo.kafkavolume.size}}
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ persistentVolumeReclaimPolicy: Retain
+ hostPath:
+ path: {{ .Values.smo.persistence.mountPath }}/smo/kafka-volume
+ storageClassName: {{ .Values.smo.kafkavolume.storageClassName }}
\ No newline at end of file
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+kind: PersistentVolume
+apiVersion: v1
+metadata:
+ name: pgsql-volume
+ namespace: {{ include "common.namespace" . }}
+spec:
+ capacity:
+ storage: {{ .Values.smo.pgsqlvolume.size}}
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ persistentVolumeReclaimPolicy: Retain
+ hostPath:
+ path: {{ .Values.smo.persistence.mountPath }}/smo/pgsql-volume
+ storageClassName: {{ .Values.smo.pgsqlvolume.storageClassName }}
\ No newline at end of file
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+
+smo:
+ installTeiv: true
+ persistence:
+ mountPath: /dockerdata-nfs
+ pgsqlvolume:
+ size: 1Gi
+ storageClassName: pgsql-sc
+ kafkavolume:
+ size: 1Gi
+ storageClassName: kafka-sc
\ No newline at end of file
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+apiVersion: v2
+name: topology-exposure-inventory
+description: A Helm chart for Kubernetes
+type: application
+version: 1.0.0
+appVersion: "1.16.0"
+
+dependencies:
+ - name: smo-common
+ version: ^1.0.0
+ repository: "@local"
+ - name: postgresql
+ version: 15.5.8
+ repository: "https://charts.bitnami.com/bitnami"
+ alias: postgresql
+ - name: kafka
+ version: 29.3.4
+ repository: "https://charts.bitnami.com/bitnami"
+ alias: kafka
+ - name: topology-exposure-inventory
+ version: 1.0.0
+ repository: "file://charts/topology-exposure-inventory"
+ alias: topology-exposure
+ - name: topology-exposure-inventory
+ version: 1.0.0
+ repository: "file://charts/topology-exposure-inventory"
+ alias: topology-ingestion
--- /dev/null
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+
+apiVersion: v1
+appVersion: "2.0.0"
+description: A Helm chart for Topology exposure
+name: topology-exposure-inventory
+version: 1.0.0
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+
+{{ include "common.applicationConfigmap" . }}
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+
+kind: Deployment
+apiVersion: apps/v1
+metadata: {{- include "common.resourceMetadata" . | nindent 2 }}
+spec:
+ replicas: 1
+ selector: {{- include "common.selectors" . | nindent 4 }}
+ template:
+ metadata: {{- include "common.templateMetadata" . | nindent 6 }}
+ spec:
+ hostname: {{ include "common.name" . }}
+ initContainers:
+ - name: init-check
+ image: alpine:latest
+ command: ['sh', '-c', 'apk add --no-cache netcat-openbsd && nc -zv oran-smo-kafka 9092 && nc -zv oran-smo-postgresql 5432']
+ containers:
+ - name: {{ include "common.containername" . }}
+ image: {{ .Values.image.registry }}/{{ .Values.image.name }}:{{ .Values.image.tag }}
+ imagePullPolicy: {{ .Values.imagePullPolicy }}
+ ports: {{- include "common.containerPorts" . | nindent 8 }}
+ {{- include "common.tcpsocketProbes" . | nindent 8 }}
+ volumeMounts:
+ - name: {{ include "common.applicationConfigMountName" . }}
+ mountPath: /opt/app/teiv/config
+ volumes: {{- include "common.applicationConfigVolume" . | nindent 8 }}
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+
+{{ include "common.service" . }}
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+
+# These values can/will be overridden from parent values.yaml
+
+imagePullPolicy: IfNotPresent
+image:
+ registry: "" # Will be set from parent values.yaml
+ name: "" # Will be set from parent values.yaml
+ tag: "" # Will be set from parent values.yaml
+service:
+ type: ClusterIP
+ ports:
+ - name: http
+ internalPort: "8080"
+ targetPort: "8080"
+liveness:
+ initialDelaySeconds: 20
+ periodSeconds: 10
+readiness:
+ initialDelaySeconds: 20
+ periodSeconds: 10
+persistence:
+ size: 2Gi
+ storageClassName: standard
+
+application:
+ logging.level.root: ${ROOT_LOG_LEVEL:"INFO"}
+ logging.level.org.apache.kafka: ${KAFKA_LOG_LEVEL:"WARN"}
+
+ #Metrics related configurations
+ management:
+ endpoint:
+ metrics:
+ enabled: "true"
+ prometheus:
+ enabled: "true"
+ health:
+ probes:
+ enabled: "true"
+ show-details: "always"
+ show-components: "always"
+ validate-group-membership: "false"
+ group:
+ readiness:
+ include: "readinessState,${HEALTH_CHECK_INDICATOR:tiesExposure}"
+ endpoints:
+ web:
+ exposure:
+ include: "*"
+ prometheus:
+ metrics:
+ export:
+ enabled: "true"
+ metrics:
+ web:
+ server:
+ request:
+ autotime:
+ enabled: "true"
+
+ spring:
+ datasource:
+ read:
+ jdbc-url: ${SERVICE_DB_REPLICA_URL:jdbc:postgresql://db-postgis-rw:5432/topology_exposure_db}
+ username: ${SERVICE_DB_USER:topology_exposure_user}
+ password: ${SERVICE_DB_PASSWORD:dbpassword}
+ driver-class-name: org.postgresql.Driver
+ write:
+ jdbc-url: ${SERVICE_DB_URL:jdbc:postgresql://db-postgis-rw:5432/topology_exposure_db}
+ username: ${SERVICE_DB_USER:topology_exposure_user}
+ password: ${SERVICE_DB_PASSWORD:dbpassword}
+ driver-class-name: org.postgresql.Driver
+ main:
+ allow-circular-references: true
+ jooq:
+ sql-dialect: postgres
+ caching:
+ consumer-data-ttl-ms: 60000
+
+ endpoints.health.sensitive: "false"
+ info.app.name: '@name@'
+ info.app.description: Topology Exposure and Inventory Service
+ info.app.version: '@version@'
+ info.app.legal: 'Copyright (C) 2024 Ericsson
+ Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ 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.
+
+ SPDX-License-Identifier: Apache-2.0'
+
+ #See more details about pattern layout: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
+ #See more details about logging.pattern.level : https://docs.spring.io/spring-boot/docs/2.5.2/reference/html/features.html#features.logging.custom-log-configuration
+ #logging.pattern.level: "%5p [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}][%X{userName}]"
+ logging:
+ pattern:
+ dateformat: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
+ config: ${LOGBACK_CONFIG_FILE:classpath:logback-json.xml}
+ endpoints:
+ exclude: /actuator/health, /actuator/prometheus, /ping, /metrics, /actuator/id-(.*)
+
+ kafka:
+ server:
+ bootstrap-server-host: smoteiv-kafka.default.svc.cluster.local
+ bootstrap-server-port: 9092
+ admin:
+ retry: 2147483647
+ retry-backoff-ms: 5000
+ reconnect-backoff-ms: 50
+ reconnect-backoff-max-ms: 30000
+ request-timeout-ms: 30000
+ availability:
+ retry-attempts: 2147483647
+ retry-interval-ms: 1000
+ topology-ingestion:
+ consumer:
+ topic:
+ name: topology-inventory-ingestion
+ partitions: 4
+ replicas: 1
+ retention-ms: 86400000
+ group-id: topology-inventory-ingestion-consumer
+ auto-offset-reset: earliest
+ max-poll-records: 500
+ max-poll-interval-ms: 300000
+ fetch-min-bytes: 1
+ fetch-max-wait-ms: 500
+ retry-attempts: 2147483647
+ retry-backoff-ms: 5000
+ concurrency: 2
+
+ database:
+ retry-policies:
+ deadlock:
+ retry-attempts: 10
+ retry-backoff-ms: 200
+
+ feature_flags:
+ use_alternate_delete_logic: false
\ No newline at end of file
--- /dev/null
+--
+-- ============LICENSE_START=======================================================
+-- Copyright (C) 2024 Ericsson
+-- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+-- ================================================================================
+-- 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.
+--
+-- SPDX-License-Identifier: Apache-2.0
+-- ============LICENSE_END=========================================================
+--
+
+BEGIN;
+
+DROP SCHEMA IF EXISTS ties_model cascade;
+CREATE SCHEMA IF NOT EXISTS ties_model;
+ALTER SCHEMA ties_model OWNER TO topology_exposure_user;
+SET default_tablespace = '';
+SET default_table_access_method = heap;
+
+SET ROLE 'topology_exposure_user';
+
+CREATE TABLE IF NOT EXISTS ties_model.execution_status (
+ "schema" VARCHAR(127) PRIMARY KEY,
+ "status" VARCHAR(127)
+);
+
+CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+ "name" VARCHAR(511) PRIMARY KEY,
+ "hashedValue" VARCHAR(511),
+ "type" VARCHAR(511)
+);
+
+CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+ "name" VARCHAR(511) PRIMARY KEY,
+ "namespace" VARCHAR(511),
+ "domain" VARCHAR(511),
+ "includedModules" jsonb,
+ "revision" VARCHAR(511),
+ "content" TEXT,
+ "ownerAppId" VARCHAR(511),
+ "status" VARCHAR(127)
+);
+
+CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+ "name" VARCHAR(511) PRIMARY KEY,
+ "moduleReferenceName" VARCHAR(511),
+ FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+ "name" VARCHAR(511) PRIMARY KEY,
+ "aSideAssociationName" TEXT,
+ "aSideMOType" TEXT,
+ "aSideMinCardinality" BIGINT,
+ "aSideMaxCardinality" BIGINT,
+ "bSideAssociationName" TEXT,
+ "bSideMOType" TEXT,
+ "bSideMinCardinality" BIGINT,
+ "bSideMaxCardinality" BIGINT,
+ "associationKind" TEXT,
+ "relationshipDataLocation" TEXT,
+ "connectSameEntity" BOOLEAN,
+ "moduleReferenceName" TEXT,
+ FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS ties_model.decorators (
+ "name" VARCHAR(511) PRIMARY KEY,
+ "dataType" VARCHAR(511),
+ "moduleReferenceName" VARCHAR(511),
+ FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS ties_model.classifiers (
+ "name" VARCHAR(511) PRIMARY KEY,
+ "moduleReferenceName" VARCHAR(511),
+ FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+);
+
+-- Update model schema exec status
+INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_model', 'success');
+
+COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+PK_ENodeBFunction_id PK_ENodeBFunction_id CONSTRAINT
+frequencyDL frequencyDL COLUMN
+NRCellDU NRCellDU TABLE
+UNIQUE_GNBCUUPFunction_REL_ID_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION UNIQUE_BDB349CDF0C4055902881ECCB71F460AE1DD323E CONSTRAINT
+REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT COLUMN
+NRSectorCarrier NRSectorCarrier TABLE
+REL_ID_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION REL_ID_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION COLUMN
+FK_LTESectorCarrier_REL_FK_used-by-euTranCell FK_LTESectorCarrier_REL_FK_used-by-euTranCell CONSTRAINT
+REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER COLUMN
+REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRCELLDU REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRCELLDU COLUMN
+frequencyUL frequencyUL COLUMN
+bSChannelBwDL bSChannelBwDL COLUMN
+UNIQUE_GNBCUCPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION UNIQUE_GNBCUCPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION CONSTRAINT
+REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU COLUMN
+CD_sourceIds CD_sourceIds COLUMN
+REL_FK_serving-physicalNF REL_FK_serving-physicalNF COLUMN
+REL_CD_classifiers_PHYSICALNF_SERVES_ENODEBFUNCTION REL_CD_classifiers_PHYSICALNF_SERVES_ENODEBFUNCTION COLUMN
+REL_CD_decorators_PHYSICALNF_SERVES_ENODEBFUNCTION REL_CD_decorators_PHYSICALNF_SERVES_ENODEBFUNCTION COLUMN
+REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUUPFUNCTION REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUUPFUNCTION COLUMN
+REL_CD_decorators_GNBCUCPFUNCTION_PROVIDES_NRCELLCU REL_CD_decorators_GNBCUCPFUNCTION_PROVIDES_NRCELLCU COLUMN
+NRCellCU NRCellCU TABLE
+REL_ID_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER REL_ID_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER COLUMN
+REL_FK_used-by-euTranCell REL_FK_used-by-euTranCell COLUMN
+UNIQUE_NRSectorCarrier_REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY UNIQUE_EDF7D5C78EF6505848B1679B714D7831F5863991 CONSTRAINT
+REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT COLUMN
+REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION COLUMN
+REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER COLUMN
+NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE TABLE
+REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION COLUMN
+FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction CONSTRAINT
+REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER COLUMN
+eNBId eNBId COLUMN
+PK_NodeCluster_id PK_NodeCluster_id CONSTRAINT
+FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_bSide_AntennaCapability FK_AB3CEA707D389B107F1D10BC724542418E02ABEC CONSTRAINT
+REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRCELLDU REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRCELLDU COLUMN
+REL_CD_sourceIds_EUTRANCELL_USES_LTESECTORCARRIER REL_CD_sourceIds_EUTRANCELL_USES_LTESECTORCARRIER COLUMN
+FK_NRCellCU_REL_FK_provided-by-gnbcucpFunction FK_NRCellCU_REL_FK_provided-by-gnbcucpFunction CONSTRAINT
+REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE COLUMN
+CD_decorators CD_decorators COLUMN
+PK_Sector_id PK_Sector_id CONSTRAINT
+GNBCUCPFunction GNBCUCPFunction TABLE
+REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+PK_ManagedElement_id PK_ManagedElement_id CONSTRAINT
+UNIQUE_AntennaModule_REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE UNIQUE_AntennaModule_REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE CONSTRAINT
+REL_CD_classifiers_PHYSICALNF_SERVES_GNBDUFUNCTION REL_CD_classifiers_PHYSICALNF_SERVES_GNBDUFUNCTION COLUMN
+REL_FK_provided-by-gnbcucpFunction REL_FK_provided-by-gnbcucpFunction COLUMN
+FK_ENodeBFunction_REL_FK_serving-physicalNF FK_ENodeBFunction_REL_FK_serving-physicalNF CONSTRAINT
+REL_CD_decorators_PHYSICALNF_SERVES_GNBCUUPFUNCTION REL_CD_decorators_PHYSICALNF_SERVES_GNBCUUPFUNCTION COLUMN
+ManagedElement ManagedElement TABLE
+PK_AntennaModule_id PK_AntennaModule_id CONSTRAINT
+PK_CloudNamespace_id PK_CloudNamespace_id CONSTRAINT
+CloudifiedNF CloudifiedNF TABLE
+FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule CONSTRAINT
+FK_EUtranCell_REL_FK_provided-by-enodebFunction FK_EUtranCell_REL_FK_provided-by-enodebFunction CONSTRAINT
+FK_ENodeBFunction_REL_FK_managed-by-managedElement FK_ENodeBFunction_REL_FK_managed-by-managedElement CONSTRAINT
+UNIQUE_GNBDUFunction_REL_ID_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION UNIQUE_08DFEFAF56EDDE43CBDC336F459D28C6518D3E1D CONSTRAINT
+PK_CloudifiedNF_id PK_CloudifiedNF_id CONSTRAINT
+REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU COLUMN
+FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_bSide_GNBDUFunction FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_bSide_GNBDUFunction CONSTRAINT
+UNIQUE_NRCellDU_REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU UNIQUE_NRCellDU_REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU CONSTRAINT
+REL_CD_classifiers_PHYSICALNF_INSTALLED_AT_SITE REL_CD_classifiers_PHYSICALNF_INSTALLED_AT_SITE COLUMN
+UNIQUE_ENodeBFunction_REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION UNIQUE_ENodeBFunction_REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION CONSTRAINT
+FK_GNBCUUPFunction_REL_FK_managed-by-managedElement FK_GNBCUUPFunction_REL_FK_managed-by-managedElement CONSTRAINT
+PK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_id PK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_id CONSTRAINT
+ANTENNAMODULE_SERVES_ANTENNACAPABILITY ANTENNAMODULE_SERVES_ANTENNACAPABILITY TABLE
+eNodeBPlmnId eNodeBPlmnId COLUMN
+PK_NRSectorCarrier_id PK_NRSectorCarrier_id CONSTRAINT
+mechanicalAntennaBearing mechanicalAntennaBearing COLUMN
+REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE COLUMN
+ENodeBFunction ENodeBFunction TABLE
+nRPCI nRPCI COLUMN
+antennaModelNumber antennaModelNumber COLUMN
+REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION COLUMN
+REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE COLUMN
+PK_NRCellCU_id PK_NRCellCU_id CONSTRAINT
+REL_FK_used-antennaCapability REL_FK_used-antennaCapability COLUMN
+REL_CD_sourceIds_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER REL_CD_sourceIds_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER COLUMN
+cellId cellId COLUMN
+UNIQUE_NRSectorCarrier_REL_ID_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER UNIQUE_872BE05F1989443F2595D99A77BC03733B2D1E2F CONSTRAINT
+REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUUPFUNCTION REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUUPFUNCTION COLUMN
+REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION COLUMN
+UNIQUE_EUtranCell_REL_ID_SECTOR_GROUPS_EUTRANCELL UNIQUE_EUtranCell_REL_ID_SECTOR_GROUPS_EUTRANCELL CONSTRAINT
+REL_CD_decorators_SECTOR_GROUPS_EUTRANCELL REL_CD_decorators_SECTOR_GROUPS_EUTRANCELL COLUMN
+REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT COLUMN
+UNIQUE_EUtranCell_REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL UNIQUE_EUtranCell_REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL CONSTRAINT
+name name COLUMN
+REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION COLUMN
+PK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_id PK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_id CONSTRAINT
+geranFqBands geranFqBands COLUMN
+REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION COLUMN
+PK_EUtranCell_id PK_EUtranCell_id CONSTRAINT
+REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION COLUMN
+REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION COLUMN
+FK_NRSectorCarrier_REL_FK_used-antennaCapability FK_NRSectorCarrier_REL_FK_used-antennaCapability CONSTRAINT
+bSide_GNBCUCPFunction bSide_GNBCUCPFunction COLUMN
+channelBandwidth channelBandwidth COLUMN
+PK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_id PK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_id CONSTRAINT
+bSide_CloudSite bSide_CloudSite COLUMN
+FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_aSide_NFDeployment FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_aSide_NFDeployment CONSTRAINT
+REL_CD_sourceIds_GNBCUCPFUNCTION_PROVIDES_NRCELLCU REL_CD_sourceIds_GNBCUCPFUNCTION_PROVIDES_NRCELLCU COLUMN
+REL_CD_decorators_PHYSICALNF_INSTALLED_AT_SITE REL_CD_decorators_PHYSICALNF_INSTALLED_AT_SITE COLUMN
+REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION COLUMN
+REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+REL_CD_sourceIds_PHYSICALNF_INSTALLED_AT_SITE REL_CD_sourceIds_PHYSICALNF_INSTALLED_AT_SITE COLUMN
+positionWithinSector positionWithinSector COLUMN
+NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION TABLE
+REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT COLUMN
+Sector Sector TABLE
+REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRCELLDU REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRCELLDU COLUMN
+PK_GNBCUCPFunction_id PK_GNBCUCPFunction_id CONSTRAINT
+REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION COLUMN
+REL_FK_deployed-on-nodeCluster REL_FK_deployed-on-nodeCluster COLUMN
+REL_CD_sourceIds_PHYSICALNF_SERVES_ENODEBFUNCTION REL_CD_sourceIds_PHYSICALNF_SERVES_ENODEBFUNCTION COLUMN
+AntennaCapability AntennaCapability TABLE
+NodeCluster NodeCluster TABLE
+REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE COLUMN
+REL_ID_NRCELLDU_USES_NRSECTORCARRIER REL_ID_NRCELLDU_USES_NRSECTORCARRIER COLUMN
+PK_GNBCUUPFunction_id PK_GNBCUUPFunction_id CONSTRAINT
+bSide_GNBDUFunction bSide_GNBDUFunction COLUMN
+UNIQUE_LTESectorCarrier_REL_ID_EUTRANCELL_USES_LTESECTORCARRIER UNIQUE_LTESectorCarrier_REL_ID_EUTRANCELL_USES_LTESECTORCARRIER CONSTRAINT
+REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_EUTRANCELL REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_EUTRANCELL COLUMN
+UNIQUE_NFDeployment_REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT UNIQUE_NFDeployment_REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT CONSTRAINT
+REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF COLUMN
+REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+azimuth azimuth COLUMN
+antennaBeamWidth antennaBeamWidth COLUMN
+NFDEPLOYMENT_SERVES_GNBDUFUNCTION NFDEPLOYMENT_SERVES_GNBDUFUNCTION TABLE
+FK_EUtranCell_REL_FK_grouped-by-sector FK_EUtranCell_REL_FK_grouped-by-sector CONSTRAINT
+REL_CD_decorators_PHYSICALNF_SERVES_GNBCUCPFUNCTION REL_CD_decorators_PHYSICALNF_SERVES_GNBCUCPFUNCTION COLUMN
+cellLocalId cellLocalId COLUMN
+REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER COLUMN
+gNBCUName gNBCUName COLUMN
+electricalAntennaTilt electricalAntennaTilt COLUMN
+REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE COLUMN
+FK_NRSectorCarrier_REL_FK_used-by-nrCellDu FK_NRSectorCarrier_REL_FK_used-by-nrCellDu CONSTRAINT
+FK_GNBDUFunction_REL_FK_serving-physicalNF FK_GNBDUFunction_REL_FK_serving-physicalNF CONSTRAINT
+REL_FK_provided-by-enodebFunction REL_FK_provided-by-enodebFunction COLUMN
+eUtranFqBands eUtranFqBands COLUMN
+REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+CD_classifiers CD_classifiers COLUMN
+aSide_NodeCluster aSide_NodeCluster COLUMN
+REL_FK_comprised-by-cloudifiedNF REL_FK_comprised-by-cloudifiedNF COLUMN
+UNIQUE_ManagedElement_REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF UNIQUE_E7BC94037DB5B94B7E863A10BEA20C2D4C3C307C CONSTRAINT
+UNIQUE_CloudNamespace_REL_ID_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER UNIQUE_C72E1EF93E1AC8FA53D20808E775FF012ACB46F0 CONSTRAINT
+FK_GNBCUCPFunction_REL_FK_serving-physicalNF FK_GNBCUCPFunction_REL_FK_serving-physicalNF CONSTRAINT
+REL_ID_EUTRANCELL_USES_LTESECTORCARRIER REL_ID_EUTRANCELL_USES_LTESECTORCARRIER COLUMN
+REL_ID_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION REL_ID_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION COLUMN
+CloudSite CloudSite TABLE
+REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION COLUMN
+FK_AntennaModule_REL_FK_grouped-by-sector FK_AntennaModule_REL_FK_grouped-by-sector CONSTRAINT
+REL_ID_PHYSICALNF_INSTALLED_AT_SITE REL_ID_PHYSICALNF_INSTALLED_AT_SITE COLUMN
+REL_FK_used-by-nrCellDu REL_FK_used-by-nrCellDu COLUMN
+FK_GNBDUFunction_REL_FK_managed-by-managedElement FK_GNBDUFunction_REL_FK_managed-by-managedElement CONSTRAINT
+PK_LTESectorCarrier_id PK_LTESectorCarrier_id CONSTRAINT
+PK_AntennaCapability_id PK_AntennaCapability_id CONSTRAINT
+geo-location geo-location COLUMN
+REL_FK_grouped-by-sector REL_FK_grouped-by-sector COLUMN
+REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU COLUMN
+UNIQUE_GNBDUFunction_REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION UNIQUE_GNBDUFunction_REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION CONSTRAINT
+FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_aSide_NFDeployment FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_aSide_NFDeployment CONSTRAINT
+gNBId gNBId COLUMN
+id id COLUMN
+PK_NRCellDU_id PK_NRCellDU_id CONSTRAINT
+EUtranCell EUtranCell TABLE
+REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT COLUMN
+REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE COLUMN
+UNIQUE_PhysicalNF_REL_ID_PHYSICALNF_INSTALLED_AT_SITE UNIQUE_PhysicalNF_REL_ID_PHYSICALNF_INSTALLED_AT_SITE CONSTRAINT
+PK_Site_id PK_Site_id CONSTRAINT
+PK_PhysicalNF_id PK_PhysicalNF_id CONSTRAINT
+REL_FK_installed-at-site REL_FK_installed-at-site COLUMN
+NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION TABLE
+CloudNamespace CloudNamespace TABLE
+nRTAC nRTAC COLUMN
+earfcndl earfcndl COLUMN
+FK_NFDeployment_REL_FK_comprised-by-cloudifiedNF FK_NFDeployment_REL_FK_comprised-by-cloudifiedNF CONSTRAINT
+FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_aSide_NFDeployment FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_aSide_NFDeployment CONSTRAINT
+FK_AntennaModule_REL_FK_installed-at-site FK_AntennaModule_REL_FK_installed-at-site CONSTRAINT
+earfcnul earfcnul COLUMN
+REL_CD_decorators_ENODEBFUNCTION_PROVIDES_EUTRANCELL REL_CD_decorators_ENODEBFUNCTION_PROVIDES_EUTRANCELL COLUMN
+aSide_NFDeployment aSide_NFDeployment COLUMN
+REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUCPFUNCTION REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUCPFUNCTION COLUMN
+FK_NRSectorCarrier_REL_FK_provided-by-gnbduFunction FK_NRSectorCarrier_REL_FK_provided-by-gnbduFunction CONSTRAINT
+FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_aSide_NodeCluster FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_aSide_NodeCluster CONSTRAINT
+REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT COLUMN
+bSide_GNBCUUPFunction bSide_GNBCUUPFunction COLUMN
+PhysicalNF PhysicalNF TABLE
+cmId cmId COLUMN
+REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER COLUMN
+type type COLUMN
+PK_NFDeployment_id PK_NFDeployment_id CONSTRAINT
+nCI nCI COLUMN
+REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER COLUMN
+REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER COLUMN
+REL_ID_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION REL_ID_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION COLUMN
+FK_NRCellDU_REL_FK_grouped-by-sector FK_NRCellDU_REL_FK_grouped-by-sector CONSTRAINT
+REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER COLUMN
+UNIQUE_LTESectorCarrier_REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9 CONSTRAINT
+duplexType duplexType COLUMN
+NODECLUSTER_LOCATED_AT_CLOUDSITE NODECLUSTER_LOCATED_AT_CLOUDSITE TABLE
+AntennaModule AntennaModule TABLE
+REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF COLUMN
+LTESectorCarrier LTESectorCarrier TABLE
+REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUCPFUNCTION REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUCPFUNCTION COLUMN
+REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE COLUMN
+FK_LTESectorCarrier_REL_FK_used-antennaCapability FK_LTESectorCarrier_REL_FK_used-antennaCapability CONSTRAINT
+REL_FK_managed-by-managedElement REL_FK_managed-by-managedElement COLUMN
+REL_CD_decorators_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION REL_CD_decorators_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION COLUMN
+REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION COLUMN
+aSide_AntennaModule aSide_AntennaModule COLUMN
+fdn fdn COLUMN
+REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+dUpLMNId dUpLMNId COLUMN
+REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION COLUMN
+REL_CD_decorators_SECTOR_GROUPS_NRCELLDU REL_CD_decorators_SECTOR_GROUPS_NRCELLDU COLUMN
+REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_EUTRANCELL REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_EUTRANCELL COLUMN
+REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU COLUMN
+REL_ID_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER REL_ID_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER COLUMN
+REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF COLUMN
+UNIQUE_NFDeployment_REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT UNIQUE_NFDeployment_REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT CONSTRAINT
+REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY COLUMN
+REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT COLUMN
+PK_NODECLUSTER_LOCATED_AT_CLOUDSITE_id PK_NODECLUSTER_LOCATED_AT_CLOUDSITE_id CONSTRAINT
+REL_ID_SECTOR_GROUPS_EUTRANCELL REL_ID_SECTOR_GROUPS_EUTRANCELL COLUMN
+REL_CD_classifiers_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER REL_CD_classifiers_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER COLUMN
+FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_aSide_NFDeployment FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_aSide_NFDeployment CONSTRAINT
+Site Site TABLE
+FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_bSide_GNBCUCPFunction FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_bSide_GNBCUCPFunction CONSTRAINT
+arfcnUL arfcnUL COLUMN
+REL_ID_SECTOR_GROUPS_NRCELLDU REL_ID_SECTOR_GROUPS_NRCELLDU COLUMN
+UNIQUE_NRCellDU_REL_ID_SECTOR_GROUPS_NRCELLDU UNIQUE_NRCellDU_REL_ID_SECTOR_GROUPS_NRCELLDU CONSTRAINT
+FK_CloudNamespace_REL_FK_deployed-on-nodeCluster FK_CloudNamespace_REL_FK_deployed-on-nodeCluster CONSTRAINT
+PK_GNBDUFunction_id PK_GNBDUFunction_id CONSTRAINT
+NFDeployment NFDeployment TABLE
+REL_FK_serviced-managedElement REL_FK_serviced-managedElement COLUMN
+dlChannelBandwidth dlChannelBandwidth COLUMN
+FK_GNBCUCPFunction_REL_FK_managed-by-managedElement FK_GNBCUCPFunction_REL_FK_managed-by-managedElement CONSTRAINT
+REL_CD_decorators_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER REL_CD_decorators_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER COLUMN
+REL_CD_decorators_EUTRANCELL_USES_LTESECTORCARRIER REL_CD_decorators_EUTRANCELL_USES_LTESECTORCARRIER COLUMN
+REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL COLUMN
+REL_CD_sourceIds_SECTOR_GROUPS_EUTRANCELL REL_CD_sourceIds_SECTOR_GROUPS_EUTRANCELL COLUMN
+REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER COLUMN
+nRFqBands nRFqBands COLUMN
+FK_NFDeployment_REL_FK_serviced-managedElement FK_NFDeployment_REL_FK_serviced-managedElement CONSTRAINT
+FK_ManagedElement_REL_FK_deployed-as-cloudifiedNF FK_ManagedElement_REL_FK_deployed-as-cloudifiedNF CONSTRAINT
+tac tac COLUMN
+arfcnDL arfcnDL COLUMN
+REL_CD_classifiers_EUTRANCELL_USES_LTESECTORCARRIER REL_CD_classifiers_EUTRANCELL_USES_LTESECTORCARRIER COLUMN
+REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION COLUMN
+PK_CloudSite_id PK_CloudSite_id CONSTRAINT
+earfcn earfcn COLUMN
+sectorId sectorId COLUMN
+REL_CD_classifiers_SECTOR_GROUPS_EUTRANCELL REL_CD_classifiers_SECTOR_GROUPS_EUTRANCELL COLUMN
+PK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_id PK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_id CONSTRAINT
+UNIQUE_GNBCUUPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION UNIQUE_GNBCUUPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION CONSTRAINT
+FK_PhysicalNF_REL_FK_installed-at-site FK_PhysicalNF_REL_FK_installed-at-site CONSTRAINT
+GNBCUUPFunction GNBCUUPFunction TABLE
+FK_GNBCUUPFunction_REL_FK_serving-physicalNF FK_GNBCUUPFunction_REL_FK_serving-physicalNF CONSTRAINT
+FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_bSide_CloudSite FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_bSide_CloudSite CONSTRAINT
+UNIQUE_AntennaModule_REL_ID_SECTOR_GROUPS_ANTENNAMODULE UNIQUE_AntennaModule_REL_ID_SECTOR_GROUPS_ANTENNAMODULE CONSTRAINT
+UNIQUE_NRSectorCarrier_REL_ID_NRCELLDU_USES_NRSECTORCARRIER UNIQUE_NRSectorCarrier_REL_ID_NRCELLDU_USES_NRSECTORCARRIER CONSTRAINT
+REL_FK_deployed-as-cloudifiedNF REL_FK_deployed-as-cloudifiedNF COLUMN
+PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id CONSTRAINT
+REL_CD_decorators_PHYSICALNF_SERVES_GNBDUFUNCTION REL_CD_decorators_PHYSICALNF_SERVES_GNBDUFUNCTION COLUMN
+REL_ID_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION REL_ID_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION COLUMN
+totalTilt totalTilt COLUMN
+REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF COLUMN
+REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER COLUMN
+REL_CD_sourceIds_PHYSICALNF_SERVES_GNBDUFUNCTION REL_CD_sourceIds_PHYSICALNF_SERVES_GNBDUFUNCTION COLUMN
+gNBIdLength gNBIdLength COLUMN
+UNIQUE_ENodeBFunction_REL_ID_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION UNIQUE_F33037EE8037D0606D15FFB45EE8A27FD6DE30EE CONSTRAINT
+FK_NRCellDU_REL_FK_provided-by-gnbduFunction FK_NRCellDU_REL_FK_provided-by-gnbduFunction CONSTRAINT
+bSide_AntennaCapability bSide_AntennaCapability COLUMN
+FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_bSide_GNBCUUPFunction FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_bSide_GNBCUUPFunction CONSTRAINT
+UNIQUE_GNBCUCPFunction_REL_ID_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION UNIQUE_249F73FF1F4316A56DEF4424FA43C2064FFBE4DD CONSTRAINT
+REL_CD_classifiers_GNBCUCPFUNCTION_PROVIDES_NRCELLCU REL_CD_classifiers_GNBCUCPFUNCTION_PROVIDES_NRCELLCU COLUMN
+REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION COLUMN
+pLMNId pLMNId COLUMN
+REL_FK_provided-by-gnbduFunction REL_FK_provided-by-gnbduFunction COLUMN
+FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_bSide_CloudNamespace FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_bSide_CloudNamespace CONSTRAINT
+UNIQUE_LTESectorCarrier_REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY UNIQUE_5D5FEB6B4B09D5D42A589753C684994CD0B96E88 CONSTRAINT
+sectorCarrierType sectorCarrierType COLUMN
+GNBDUFunction GNBDUFunction TABLE
+mechanicalAntennaTilt mechanicalAntennaTilt COLUMN
+UNIQUE_NRCellCU_REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU UNIQUE_NRCellCU_REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU CONSTRAINT
+plmnId plmnId COLUMN
+bSide_CloudNamespace bSide_CloudNamespace COLUMN
+gNBDUId gNBDUId COLUMN
+REL_ID_SECTOR_GROUPS_ANTENNAMODULE REL_ID_SECTOR_GROUPS_ANTENNAMODULE COLUMN
+REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT COLUMN
+\.
+
+COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content", "ownerAppId", "status") FROM stdin;
+o-ran-smo-teiv-common-yang-extensions urn:o-ran:smo-teiv-common-yang-extensions \N [] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewoKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogIHByZWZpeCBvci10ZWl2LXlleHQ7CgogIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOwogIGRlc2NyaXB0aW9uCiAgIlRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgWUFORyBleHRlbnNpb25zIG1vZGVsLgoKICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogIGludmVudG9yeSBtb2RlbHMgd2lsbCB1c2UgdG8gZGVmaW5lIGFuZCBhbm5vdGF0ZSB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4iOwoKICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICB9CgogIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewoKICAgIGRlc2NyaXB0aW9uCiAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICBBIGJpLWRpcmVjdGlvbmFsLWFzc29jaWF0aW9uIChCREEpIGlzIGEgcmVsYXRpb25zaGlwIGNvbXByaXNpbmcgb2YgYW4KICAgICAgIEEtc2lkZSBhbmQgYSBCLXNpZGUuIFRoZSBBLXNpZGUgaXMgY29uc2lkZXJlZCB0aGUgb3JpZ2luYXRpbmcgc2lkZSBvZgogICAgICAgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZyBzaWRlIG9mIHRoZQogICAgICAgcmVsYXRpb25zaGlwLiBUaGUgb3JkZXIgb2YgQS1zaWRlIGFuZCBCLXNpZGUgaXMgb2YgaW1wb3J0YW5jZSBhbmQgTVVTVAogICAgICAgTk9UIGJlIGNoYW5nZWQgb25jZSBkZWZpbmVkLgoKICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4gQQogICAgICAgdHlwZSBtYXkgaGF2ZSBtdWx0aXBsZSBvcmlnaW5hdGluZyBhbmQvb3IgdGVybWluYXRpbmcgc2lkZXMgb2YgYQogICAgICAgcmVsYXRpb25zaGlwLCBhbGwgZGlzdGluZ3Vpc2hlZCBieSByb2xlIG5hbWUuCgogICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgIE11bHRpcGxlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQKICAgICAgIHBlciBwYXJlbnQgc3RhdGVtZW50LgoKICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZSB0aGUKICAgICAgIEEtc2lkZSBhbmQgdGhlIEItc2lkZSwgcmVzcGVjdGl2ZWx5LCBhbmQgb3B0aW9uYWxseSBwcm9wZXJ0aWVzIG9mIHRoZQogICAgICAgcmVsYXRpb25zaGlwLiBEYXRhIG5vZGVzIG9mIHR5cGVzICdsZWFmJyBhbmQgJ2xlYWYtbGlzdCcgYXJlIHVzZWQgZm9yCiAgICAgICB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZSAnYS1zaWRlJwogICAgICAgZXh0ZW5zaW9uOyBhbm90aGVyIGRhdGEgbm9kZSBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZSAnYi1zaWRlJwogICAgICAgZXh0ZW5zaW9uLiBPdGhlciBkYXRhIG5vZGVzIGRlZmluZSBwcm9wZXJ0aWVzIG9mIHRoZSByZWxhdGlvbnNoaXAuCgogICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZSBpcwogICAgICAgc2NvcGVkIHRvIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGRlY2xhcmluZyBtb2R1bGUgYW5kIE1VU1QgYmUgdW5pcXVlCiAgICAgICB3aXRoaW4gdGhlIHNjb3BlLiI7CgogICAgYXJndW1lbnQgcmVsYXRpb25zaGlwTmFtZTsKICB9CgogIGV4dGVuc2lvbiBhU2lkZSB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiRGVmaW5lcyB0aGUgQS1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICBzdGF0ZW1lbnQsIHdoaWNoIGl0c2VsZiBtdXN0IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZQogICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICdpbnN0YW5jZS1pZGVudGlmaWVyJy4gQ29uc3RyYWludHMgTUFZIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcGFyZW50CiAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUgb2YKICAgICAgIHRoZSByb2xlIG9mIHRoZSBBLXNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcC4gVGhlIG5hbWUgb2YgdGhlIHJvbGUgaXMKICAgICAgIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUgdW5pcXVlCiAgICAgICB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgIFdoaWxlIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGRvZXMgbm90IHJlc3VsdCBpbiBhIHByb3BlcnR5IG9mCiAgICAgICB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICBiZXR3ZWVuIHByb3BlcnRpZXMgb2YgYSB0eXBlLCBhbmQgcm9sZXMgb2YgYSByZWxhdGlvbnNoaXAgb24gdGhlIHR5cGUuCgogICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBBLXNpZGUgcmVzaWRlcy4gSWYgdGhlCiAgICAgICB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlIHByZWZpeGVkLCBhbmQgYQogICAgICAgY29ycmVzcG9uZGluZyAnaW1wb3J0JyBzdGF0ZW1lbnQgYmUgdXNlZCB0byBkZWNsYXJlIHRoZSBwcmVmaXguIjsKCiAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgfQoKICBleHRlbnNpb24gYlNpZGUgewogICAgZGVzY3JpcHRpb24gIkRlZmluZXMgdGhlIEItc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiBhICdsZWFmJyBvciAnbGVhZi1saXN0JwogICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgVGhlIGRhdGEgdHlwZSBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBNVVNUIGJlCiAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgaXMgdXNlZCBhcyBuYW1lIG9mCiAgICAgICB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlIGlzCiAgICAgICBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEItc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlIHVuaXF1ZQogICAgICAgd2l0aGluIHRoZSBzY29wZS4KCiAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eSBvZgogICAgICAgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgIGV4aXN0aW5nIHR5cGUgcHJvcGVydHkgYXMgcm9sZSBuYW1lIHRvIGF2b2lkIHBvdGVudGlhbCBhbWJpZ3VpdGllcwogICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZSB0eXBlLgoKICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIHJlc2lkZXMuIElmIHRoZQogICAgICAgdHlwZSBpcyBkZWNsYXJlZCBpbiBhbm90aGVyIG1vZHVsZSwgdGhlIHR5cGUgbXVzdCBiZSBwcmVmaXhlZCwgYW5kIGEKICAgICAgIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZSB0aGUgcHJlZml4LiI7CgogICAgYXJndW1lbnQgYlNpZGVUeXBlOwogIH0KCiAgZXh0ZW5zaW9uIGRvbWFpbiB7CiAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgYXJndW1lbnQgZG9tYWluTmFtZTsKICB9CgogIGV4dGVuc2lvbiBsYWJlbCB7CiAgICBkZXNjcmlwdGlvbiAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMg4oCYeC55LnrigJkg4oCTIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcyBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuICBaZXJvIG9yIG9uZSByZXZpc2lvbiBsYWJlbCBzdGF0ZW1lbnRzCiAgICAgIHBlciBwYXJlbnQgc3RhdGVtZW50IGFyZSBhbGxvd2VkLgoKICAgICAgUmV2aXNpb24gbGFiZWxzIE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgYWxsIHJldmlzaW9ucyBvZiBhIG1vZHVsZSBvciBzdWJtb2R1bGUuIjsKICAgICAgYXJndW1lbnQgc2VtdmVyc2lvbjsKICB9Cn0= BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-oam-to-cloud urn:o-ran:smo-teiv-oam-to-cloud OAM_TO_CLOUD ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-cloud"] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LW9hbS10by1jbG91ZCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtb2FtLXRvLWNsb3VkIjsKICAgIHByZWZpeCBvci10ZWl2LW9hbXRvY2xvdWQ7CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHtwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7cHJlZml4IG9yLXRlaXYtb2FtOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNsb3VkIHtwcmVmaXggb3ItdGVpdi1jbG91ZDsgfQoKICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogICAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgbW9kZWwuCgogICAgQ29weXJpZ2h0IChjKSAyMDIzIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIFJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgcmVsYXRpb25zIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gT0FNX1RPX0NMT1VEOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfREVQTE9ZRURfQVNfQ0xPVURJRklFRE5GIHsgIC8vIDAuLjEgdG8gMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiBkZXBsb3llZC1hcy1jbG91ZGlmaWVkTkYgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IGRlcGxveWVkIGFzIENsb3VkaWZpZWQgTkYuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGRlcGxveWVkLW1hbmFnZWRFbGVtZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkNsb3VkaWZpZWQgTkYgZGVwbG95cyBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtY2xvdWQ6Q2xvdWRpZmllZE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfTUFOQUdFREVMRU1FTlQgeyAvLyAxLi5uIHRvIDEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgc2VydmljZWQtbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQp9 BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKCiAgeWFuZy12ZXJzaW9uIDEuMTsKICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgcHJlZml4IG9yLXRlaXYtdHlwZXM7CgogIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0eXBlczNncHA7IH0KCiAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgZGVzY3JpcHRpb24KICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwuCgogIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgVGhpcyBtb2RlbCBjb250YWlucyByZS11c2FibGUgZGF0YSB0eXBlcyB0aGF0IHRvcG9sb2d5IGFuZCBpbnZlbnRvcnkgbW9kZWxzCiAgd2lsbCBmcmVxdWVudGx5IHVzZSBhcyBwYXJ0IG9mIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7CiAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogIH0KCiAgZ3JvdXBpbmcgVG9wX0dycF9UeXBlIHsKCiAgICBkZXNjcmlwdGlvbiAiR3JvdXBpbmcgY29udGFpbmluZyB0aGUga2V5IGF0dHJpYnV0ZSBjb21tb24gdG8gYWxsIHR5cGVzLiBBbGwgdHlwZXMKICAgICAgICAgICAgICAgIE1VU1QgdXNlIHRoaXMgZ3JvdXBpbmcuIjsKCiAgICBsZWFmIGlkIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBvZiB0b3BvbG9neSBlbnRpdGllcy4gUmVwcmVzZW50cyB0aGUgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgIH0KICB9CgogIGdyb3VwaW5nIENNX0lEIHsKCiAgICBkZXNjcmlwdGlvbiAiR3JvdXBpbmcgY29udGFpbmluZyB0aGUga2V5IGF0dHJpYnV0ZXMgdG8gbWFrZQogICAgICAgICAgICAgICAgdXNlIG9mIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCAoQ00pLiI7CgogICAgbGVhZiBjbUhhbmRsZSB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIG5ldHdvcmsgZW50aXRpZXMgaW4gQ00uIjsKICAgIH0KCiAgICBsZWFmIHJlc291cmNlSWRlbnRpZmllciB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBkZXNjcmlwdGlvbiAiVGhlIHhwYXRoIGV4cHJlc3Npb24gaWRlbnRpZnlpbmcgdGhlIHJlc291cmNlIGluIHRoZSBOb2RlIG1vZGVsIHlhbmcgdHJlZS4iOwogICAgfQogIH0KCiAgdHlwZWRlZiBfM0dQUF9GRE5fVHlwZSB7CiAgICB0eXBlIHR5cGVzM2dwcDpEaXN0aW5ndWlzaGVkTmFtZTsKICB9CgogIGNvbnRhaW5lciBjb25zdW1lci1kYXRhIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIGNvbnRhaW5lciBkZWZpbmVzIHRoZSBjb25zdW1lci1kYXRhLiBDb25zdW1lci1kYXRhIG1heSBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4KICAgICAgICAgICAgICAgIFRoaXMgY29udGFpbmVyIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBjb250YWluZXIgc2VydmVzIGFzIGV4dGVuc2lvbiBwb2ludCBmb3IgYXBwbGljYXRpb25zIHdpc2hpbmcgdG8gZGVmaW5lIHRoZWlyIG93biBkZWNvcmF0b3JzLgogICAgICAgICAgICAgICAgICBUaGlzIGlzIGRvbmUgdmlhIGF1Z21lbnRhdGlvbnMuIFRoZXkgY2FuIG9ubHkgYmUgZGVmaW5lZCBpbiBuYW1lIHZhbHVlIHBhaXIuIjsKICAgIH0KCiAgICBsZWFmLWxpc3QgY2xhc3NpZmllcnMgewogICAgICBkZXNjcmlwdGlvbiAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CiAgICAgIHR5cGUgaWRlbnRpdHlyZWYgeyBiYXNlIGNsYXNzaWZpZXI7IH0KICAgIH0KCiAgICBsZWFmLWxpc3Qgc291cmNlSWRzIHsKICAgICAgZGVzY3JpcHRpb24gIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlIHNvdXJjZSBpZGVudGlmaWVycyBmb3IgcGFydGljaXBhdGluZwogICAgICAgICAgICAgICAgICBlbnRpdGllcy4iOwogICAgICB0eXBlIHN0cmluZzsKICAgICAgb3JkZXJlZC1ieSB1c2VyOwogICAgfQoKICAgIGNvbnRhaW5lciBtZXRhZGF0YSB7CiAgICAgIGRlc2NyaXB0aW9uICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleSBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUKICAgICAgICAgICAgICAgICAgcGFpci4iOwogICAgfQogIH0KCiAgaWRlbnRpdHkgY2xhc3NpZmllcnsKICAgIGRlc2NyaXB0aW9uICAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMgd2l0aCBpZGVudGl0eS4gIjsKICB9Cn0= BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-oam urn:o-ran:smo-teiv-oam OAM [] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LW9hbSB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtb2FtIjsKICAgIHByZWZpeCBvci10ZWl2LW9hbTsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsKICAgIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOwogICAgZGVzY3JpcHRpb24KICAgICJSQU4gTyZNIHRvcG9sb2d5IG1vZGVsLgoKICAgIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQogICAgUkFOIE8mTSBkb21haW4sIHdoaWNoIGFyZSBpbnRlbmRlZCB0byByZXByZXNlbnQgbWFuYWdlbWVudCBzeXN0ZW1zCiAgICBhbmQgbWFuYWdlbWVudCBpbnRlcmZhY2VzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIE9BTTsKCiAgICBsaXN0IE1hbmFnZWRFbGVtZW50IHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBNYW5hZ2VkIEVsZW1lbnQgKE1FKSBpcyBhIG5vZGUgaW50byBhIHRlbGVjb21tdW5pY2F0aW9uIG5ldHdvcmsKICAgICAgICAgICAgICAgICAgICBwcm92aWRpbmcgc3VwcG9ydCBhbmQvb3Igc2VydmljZSB0byBzdWJzY3JpYmVycy4gQW4gTUUgY29tbXVuaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgd2l0aCBhIG1hbmFnZXIgYXBwbGljYXRpb24gKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIG92ZXIgb25lIG9yIG1vcmUKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VzIGZvciB0aGUgcHVycG9zZSBvZiBiZWluZyBtb25pdG9yZWQgYW5kL29yIGNvbnRyb2xsZWQuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBmZG4gewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgRnVsbCBEaXN0aW5ndWlzaGVkIE5hbWUgKEZETikgaWRlbnRpZmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhlIE1hbmFnZWRFbGVtZW50IE1PLiBJdCBjb250YWlucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bGwgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlZEVsZW1lbnQuIjsKICAgICAgICAgICAgICAgIHR5cGUgb3ItdGVpdi10eXBlczpfM0dQUF9GRE5fVHlwZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9 BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-oam-to-ran urn:o-ran:smo-teiv-oam-to-ran OAM_TO_RAN ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-ran"] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LW9hbS10by1yYW4gewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LW9hbS10by1yYW4iOwogICAgcHJlZml4IG9yLXRlaXYtb2FtdG9yYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHtwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7cHJlZml4IG9yLXRlaXYtb2FtOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LXJhbiB7cHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiUkFOIE8mTSB0byBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTyZNIHRvIExvZ2ljYWwgdG9wb2xvZ3kgcmVsYXRpb25zIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gT0FNX1RPX1JBTjsKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE1BTkFHRURFTEVNRU5UX01BTkFHRVNfRU5PREVCRlVOQ1RJT04geyAgIC8vIDEgdG8gMC4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IG1hbmFnZWQtZW5vZGViRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgZU5vZGVCIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LW9hbTpNYW5hZ2VkRWxlbWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBtYW5hZ2VkLWJ5LW1hbmFnZWRFbGVtZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gImVOb2RlQiBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46RU5vZGVCRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19HTkJEVUZVTkNUSU9OIHsgICAgLy8gMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbWFuYWdlZC1nbmJkdUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIGdOb2RlQi1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgbWFuYWdlZC1ieS1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJnTm9kZUItRFUgRnVuY3Rpb24gbWFuYWdlZCBieSBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkdOQkRVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19HTkJDVUNQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLWduYmN1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VkIEVsZW1lbnQgbWFuYWdlcyBnTm9kZUItQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCLUNVLUNQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpHTkJDVUNQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19HTkJDVVVQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLWduYmN1dXBGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VkIEVsZW1lbnQgbWFuYWdlcyBnTm9kZUItQ1UtVVAgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCLUNVLVVQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpHTkJDVVVQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQp9 BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-ran urn:o-ran:smo-teiv-ran RAN [] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogICAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQogICAgUkFOIExvZ2ljYWwgZG9tYWluLCB3aGljaCByZXByZXNlbnRzIHRoZSBmdW5jdGlvbmFsIGNhcGFiaWxpdHkKICAgIG9mIHRoZSBkZXBsb3llZCBSQU4gdGhhdCBhcmUgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJBTjsKCiAgICBsaXN0IEdOQkRVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJnTm9kZUIgRGlzdHJpYnV0ZWQgVW5pdCAoZ05CLURVKS4KCiAgICAgICAgICAgICAgICAgICAgQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBnTkItQ2VudHJhbGl6ZWQgVW5pdAogICAgICAgICAgICAgICAgICAgIChnTkItQ1UpIGFuZCBhIGdOQi1EVS4gVGhlIENVIHByb2Nlc3NlcyBub24tcmVhbAogICAgICAgICAgICAgICAgICAgIHRpbWUgcHJvdG9jb2xzIGFuZCBzZXJ2aWNlcywgYW5kIHRoZSBEVSBwcm9jZXNzZXMKICAgICAgICAgICAgICAgICAgICBQSFkgbGV2ZWwgcHJvdG9jb2wgYW5kIHJlYWwgdGltZSBzZXJ2aWNlcy4gVGhlCiAgICAgICAgICAgICAgICAgICAgZ05CLUNVIGFuZCB0aGUgZ05CLURVIHVuaXRzIGFyZSBjb25uZWN0ZWQgdmlhCiAgICAgICAgICAgICAgICAgICAgRjEgbG9naWNhbCBpbnRlcmZhY2UuCgogICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgdHJ1ZSBmb3IgYSBnTkItRFU6CiAgICAgICAgICAgICAgICAgICAgSXMgY29ubmVjdGVkIHRvIHRoZSBnTkItQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQwogICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS5JcyBjb25uZWN0ZWQgdG8gdGhlIGdOQi1DVS1VUCB0aHJvdWdoCiAgICAgICAgICAgICAgICAgICAgdGhlIEYxLVUgaW50ZXJmYWNlLiBPbmUgZ05CLURVIGlzIGNvbm5lY3RlZCB0byBvbmx5CiAgICAgICAgICAgICAgICAgICAgb25lIGdOQi1DVS1DUC4gT25lIGdOQi1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgZ05CLUNVLVVQcyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgc2FtZQogICAgICAgICAgICAgICAgICAgIGdOQi1DVS1DUC4KICAgICAgICAgICAgICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhIGdOQi1DVS1DUCwgbXVsdGlwbGUKICAgICAgICAgICAgICAgICAgICBnTkItQ1UtVVBzIGFuZCBtdWx0aXBsZSBnTkItRFVzLiBnTkItRFUgaXMgYSBjb25jcmV0ZQogICAgICAgICAgICAgICAgICAgIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOIG5vZGUgb2JqZWN0LiBJbiBUb3BvbG9neSwgeW91CiAgICAgICAgICAgICAgICAgICAgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIHRoZSBnTkItRFUgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZmRuIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIEZ1bGwgRGlzdGluZ3Vpc2hlZCBOYW1lIChGRE4pIGlkZW50aWZpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIHRoZSBHTkJEVUZ1bmN0aW9uIE1PLiBJdCBjb250YWlucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bGwgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgR05CRFVGdW5jdGlvbi4iOwogICAgICAgICAgICAgICAgdHlwZSBvci10ZWl2LXR5cGVzOl8zR1BQX0ZETl9UeXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgZFVwTE1OSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gaWRlbnRpZmllciB1c2VkIGFzIHBhcnQgb2YgUE0gRXZlbnRzIGRhdGEiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQkRVSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgRFUgd2l0aGluIGEgZ05vZGVCIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBjbUlkIHsKICAgICAgICAgICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpDTV9JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IEdOQkNVQ1BGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQiBDZW50cmFsaXplZCBVbml0IENvbnRyb2wgUGxhbmUgKGdOQi1DVS1DUCkKCiAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGxvZ2ljYWwgbm9kZSBob3N0aW5nIHRoZSBSYWRpbyBSZXNvdXJjZQogICAgICAgICAgICAgICAgICAgIENvbnRyb2wgKFJSQykgYW5kIHRoZSBjb250cm9sIHBsYW5lIHBhcnQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgUGFja2V0IERhdGEgQ29udmVyZ2VuY2UgUHJvdG9jb2wgKFBEQ1ApIG9mIHRoZQogICAgICAgICAgICAgICAgICAgIGdOb2RlQiBDZW50cmFsaXplZCBVbml0IChnTkItQ1UpIGZvciBhbiBFLVVUUkFOIGdOb2RlQgogICAgICAgICAgICAgICAgICAgIChlbi1nTkIpIG9yIGEgZ05vZGVCIChnTkIpLiBUaGUgZ05CLUNVLUNQIHRlcm1pbmF0ZXMKICAgICAgICAgICAgICAgICAgICB0aGUgRTEgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBnTkItQ1UtVVAgYW5kIHRoZQogICAgICAgICAgICAgICAgICAgIEYxLUMgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBnTm9kZUIKICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRlZCBVbml0IChnTkItRFUpLgoKICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgZ05CLUNVLUNQOgogICAgICAgICAgICAgICAgICAgIElzIGNvbm5lY3RlZCB0byB0aGUgZ05CLURVIHRocm91Z2ggdGhlIEYxLUMgaW50ZXJmYWNlLgogICAgICAgICAgICAgICAgICAgIElzIGNvbm5lY3RlZCB0byB0aGUgZ05CLUNVLVVQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4KICAgICAgICAgICAgICAgICAgICBPbmx5IG9uZSBnTkItQ1UtQ1AgaXMgY29ubmVjdGVkIHRvIG9uZSBnTkItRFUuCiAgICAgICAgICAgICAgICAgICAgT25seSBvbmUgZ05CLUNVLUNQIGlzIGNvbm5lY3RlZCB0byBvbmUgZ05CLUNVLVVQLgogICAgICAgICAgICAgICAgICAgIE9uZSBnTkItRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBnTkItQ1UtVVBzCiAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgZ05CLUNVLUNQLk9uZSBnTkItQ1UtVVAKICAgICAgICAgICAgICAgICAgICBjYW4gYmUgY29ubmVjdGVkIHRvIG11bHRpcGxlIERVcyB1bmRlciB0aGUgY29udHJvbCBvZgogICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIGdOQi1DVS1DUC4KICAgICAgICAgICAgICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhIGdOQi1DVS1DUCwgbXVsdGlwbGUKICAgICAgICAgICAgICAgICAgICBnTkItQ1UtVVBzIGFuZCBtdWx0aXBsZSBnTkItRFVzLiBBIGdOQi1DVS1DUCBpcyBhCiAgICAgICAgICAgICAgICAgICAgY29uY3JldGUgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBORy1SQU4gbm9kZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgSW4gVG9wb2xvZ3ksIHlvdSBjYW4gY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUKICAgICAgICAgICAgICAgICAgICB0aGUgZ05CLUNVLUNQIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGZkbiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBGdWxsIERpc3Rpbmd1aXNoZWQgTmFtZSAoRkROKSBpZGVudGlmaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiB0aGUgR05CQ1VDUEZ1bmN0aW9uIE1PLiBJdCBjb250YWlucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bGwgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgR05CQ1VDUEZ1bmN0aW9uLiI7CiAgICAgICAgICAgICAgICB0eXBlIG9yLXRlaXYtdHlwZXM6XzNHUFBfRkROX1R5cGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CQ1VOYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIGdOb2RlQi1DVSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBnbG9iYWwgUkFOIG5vZGUgaWRlbnRpdHkiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgY21JZCB7CiAgICAgICAgICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6Q01fSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBHTkJDVVVQRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJnTm9kZUIgQ2VudHJhbGl6ZWQgVW5pdCBVc2VyIFBsYW5lIChnTkItQ1UtVVApCgogICAgICAgICAgICAgICAgICAgIEEgZ05CLUNVLVVQIGlzIGEgbG9naWNhbCBub2RlIGhvc3RpbmcgdGhlIFVzZXIKICAgICAgICAgICAgICAgICAgICBQbGFuZSBwYXJ0IG9mIHRoZSBQYWNrZXQgRGF0YSBDb252ZXJnZW5jZSwKICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCAoUERDUCkgb2YgdGhlIGdOb2RlQiBDZW50cmFsaXplZCBVbml0CiAgICAgICAgICAgICAgICAgICAgKGdOQi1DVSkgZm9yIGFuIEUtVVRSQU4gZ05vZGVCIChlbi1nTkIpLCBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgVXNlciBQbGFuZSBwYXJ0IG9mIHRoZSBQRENQIHByb3RvY29sIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlIERhdGEgQWRhcHRhdGlvbiBQcm90b2NvbCAoU0RBUCkgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgZ05CLUNVIGZvciBhIGdOb2RlQiAoZ05CKS4gVGhlIGdOQi1DVS1VUCB0ZXJtaW5hdGVzCiAgICAgICAgICAgICAgICAgICAgdGhlIEUxIGludGVyZmFjZSBjb25uZWN0ZWQgd2l0aCB0aGUgZ05CLUNVLUNQIGFuZAogICAgICAgICAgICAgICAgICAgIHRoZSBGMS1VIGludGVyZmFjZSBjb25uZWN0ZWQgd2l0aCB0aGUgZ05vZGVCCiAgICAgICAgICAgICAgICAgICAgRGlzdHJpYnV0ZWQgVW5pdCAoZ05CLURVKS4KCiAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyB0cnVlIGZvciBhIGdOQi1DVS1VUDoKICAgICAgICAgICAgICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIGdOQi1EVSB0aHJvdWdoIHRoZQogICAgICAgICAgICAgICAgICAgIEYxLVUgaW50ZXJmYWNlLiBJcyBjb25uZWN0ZWQgdG8gdGhlIGdOQi1DVS1DUCB0aHJvdWdoCiAgICAgICAgICAgICAgICAgICAgdGhlIEUxIGludGVyZmFjZS4gT25lIGdOQi1DVS1VUCBpcyBjb25uZWN0ZWQgdG8gb25seSBvbmUKICAgICAgICAgICAgICAgICAgICBnTkItQ1UtQ1AuIE9uZSBnTkItRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZQogICAgICAgICAgICAgICAgICAgIGdOQi1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgZ05CLUNVLUNQLiBPbmUKICAgICAgICAgICAgICAgICAgICBnTkItQ1UtVVAgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlCiAgICAgICAgICAgICAgICAgICAgY29udHJvbCBvZiB0aGUgc2FtZSBnTkItQ1UtQ1AuCiAgICAgICAgICAgICAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBnTkItQ1UtQ1AsIG11bHRpcGxlIGdOQi1DVS1VUHMKICAgICAgICAgICAgICAgICAgICBhbmQgbXVsdGlwbGUgZ05CLURVcy4gQSBnTkItQ1UtVVAgaXMgYSBjb25jcmV0ZSBjbGFzcyB0aGF0CiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kcyB0aGUgTkctUkFOIG5vZGUgb2JqZWN0LiBJbiBUb3BvbG9neSwgeW91IGNhbgogICAgICAgICAgICAgICAgICAgIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIHRoZSBnTkItQ1UtVVAgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZmRuIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIEZ1bGwgRGlzdGluZ3Vpc2hlZCBOYW1lIChGRE4pIGlkZW50aWZpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIHRoZSBHTkJDVVVQRnVuY3Rpb24gTU8uIEl0IGNvbnRhaW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnVsbCBwYXRoIGZyb20gdGhlIFN1Ym5ldHdvcmsgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTkJDVVVQRnVuY3Rpb24uIjsKICAgICAgICAgICAgICAgIHR5cGUgb3ItdGVpdi10eXBlczpfM0dQUF9GRE5fVHlwZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgY21JZCB7CiAgICAgICAgICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6Q01fSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOUkNlbGxDVSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYW4gTlIgQ2VsbCBpbiBnTm9kZUItQ1UuCgogICAgICAgICAgICAgICAgICAgIDVHIE5SIGlzIGEgbmV3IHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IChSQVQpCiAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVkIGJ5IDNHUFAgZm9yIHRoZSA1RyAoZmlmdGggZ2VuZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICBtb2JpbGUgbmV0d29yay4gSXQgaXMgZGVzaWduZWQgdG8gYmUgdGhlIGdsb2JhbAogICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIGZvciB0aGUgYWlyIGludGVyZmFjZSBvZiA1RyBuZXR3b3Jrcy4KCiAgICAgICAgICAgICAgICAgICAgNUcgTlIgaGFzIHN5bmNocm9uaXphdGlvbiBzaWduYWwgdGhhdCBpcyBrbm93biBhcwogICAgICAgICAgICAgICAgICAgIFByaW1hcnkgU3luY2hyb25pemF0aW9uIHNpZ25hbCAoUFNTKSBhbmQgU2Vjb25kYXJ5CiAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHNpZ25hbCAoU1NTKS4gVGhlc2Ugc2lnbmFscyBhcmUKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byBOUiBwaHlzaWNhbCBsYXllciBhbmQgcHJvdmlkZSB0aGUKICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgVUUgZm9yIGRvd25saW5rCiAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemF0aW9uOiBQU1MgcHJvdmlkZXMgUmFkaW8gRnJhbWUgQm91bmRhcnkKICAgICAgICAgICAgICAgICAgICAoUG9zaXRpb24gb2YgMXN0IFN5bWJvbCBpbiBhIFJhZGlvIGZyYW1lKSBTU1MgcHJvdmlkZXMKICAgICAgICAgICAgICAgICAgICBTdWJmcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YgMXN0IFN5bWJvbCBpbiBhIFN1YmZyYW1lKQogICAgICAgICAgICAgICAgICAgIFBoeXNpY2FsIExheWVyIENlbGwgSUQgKFBDSSkgaW5mb3JtYXRpb24gdXNpbmcgYm90aAogICAgICAgICAgICAgICAgICAgIFBTUyBhbmQgU1NTLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZmRuIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIEZ1bGwgRGlzdGluZ3Vpc2hlZCBOYW1lIChGRE4pIGlkZW50aWZpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxDVSBNTy4gSXQgY29udGFpbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmdWxsIHBhdGggZnJvbSB0aGUgU3VibmV0d29yayB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SQ2VsbENVLiI7CiAgICAgICAgICAgICAgICB0eXBlIG9yLXRlaXYtdHlwZXM6XzNHUFBfRkROX1R5cGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgY2VsbExvY2FsSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZWQgdG9nZXRoZXIgd2l0aCBnTm9kZUIgaWRlbnRpZmllciB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZnkgTlIgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGdOQklkIHRvIGZvcm0gTkNJLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIHBsbW5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBJRCBmb3IgTlIgQ0dJLiBJZiBlbXB0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQkNVQ1BGdW5jdGlvbjo6cExNTklkIGlzIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBQTE1OIElEIGluIE5SIENHSSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbkNJIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsIElkZW50aXR5IjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5SVEFDIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBUcmFja2luZyBBcmVhIENvZGUgKFRBQykiOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBjbUlkIHsKICAgICAgICAgICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpDTV9JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SQ2VsbERVIHsKICAgICAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyBhbiBOUiBDZWxsIGluIGdOb2RlQi1EVS4KCiAgICAgICAgICAgICAgICAgICAgNUcgTlIgaXMgYSBuZXcgcmFkaW8gYWNjZXNzIHRlY2hub2xvZ3kgKFJBVCkKICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZWQgYnkgM0dQUCBmb3IgdGhlIDVHIChmaWZ0aCBnZW5lcmF0aW9uKQogICAgICAgICAgICAgICAgICAgIG1vYmlsZSBuZXR3b3JrLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUgZ2xvYmFsCiAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgZm9yIHRoZSBhaXIgaW50ZXJmYWNlIG9mIDVHIG5ldHdvcmtzLgoKICAgICAgICAgICAgICAgICAgICA1RyBOUiBoYXMgc3luY2hyb25pemF0aW9uIHNpZ25hbCB0aGF0IGlzIGtub3duIGFzCiAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChQU1MpIGFuZCBTZWNvbmRhcnkKICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChTU1MpLiBUaGVzZSBzaWduYWxzIGFyZQogICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIE5SIHBoeXNpY2FsIGxheWVyIGFuZCBwcm92aWRlIHRoZQogICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBVRSBmb3IgZG93bmxpbmsKICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb246IFBTUyBwcm92aWRlcyBSYWRpbyBGcmFtZSBCb3VuZGFyeQogICAgICAgICAgICAgICAgICAgIChQb3NpdGlvbiBvZiAxc3QgU3ltYm9sIGluIGEgUmFkaW8gZnJhbWUpIFNTUyBwcm92aWRlcwogICAgICAgICAgICAgICAgICAgIFN1YmZyYW1lIEJvdW5kYXJ5IChQb3NpdGlvbiBvZiAxc3QgU3ltYm9sIGluIGEgU3ViZnJhbWUpCiAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWwgTGF5ZXIgQ2VsbCBJRCAoUENJKSBpbmZvcm1hdGlvbiB1c2luZyBib3RoCiAgICAgICAgICAgICAgICAgICAgUFNTIGFuZCBTU1MuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBmZG4gewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgRnVsbCBEaXN0aW5ndWlzaGVkIE5hbWUgKEZETikgaWRlbnRpZmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIE1PLiBJdCBjb250YWlucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bGwgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJDZWxsRFUuIjsKICAgICAgICAgICAgICAgIHR5cGUgb3ItdGVpdi10eXBlczpfM0dQUF9GRE5fVHlwZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBjZWxsTG9jYWxJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVXNlZCB0b2dldGhlciB3aXRoIGdOb2RlQiBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IE5SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyIHdpdGggZ05CSWQgdG8gZm9ybSBOQ0kuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5DSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJQQ0kgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBuUlRBQyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgVHJhY2tpbmcgQXJlYSBDb2RlIChUQUMpLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgRU5vZGVCRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBFdm9sdmVkIE5vZGUgQiAoZU5vZGVCKSBpcyB0aGUgb25seSBtYW5kYXRvcnkKICAgICAgICAgICAgICAgICAgICBub2RlIGluIHRoZSByYWRpbyBhY2Nlc3MgbmV0d29yayAoUkFOKSBvZiBMb25nLVRlcm0KICAgICAgICAgICAgICAgICAgICBFdm9sdXRpb24gKExURSkuIFRoZSBlTm9kZUIgaXMgYSBjb21wbGV4IGJhc2UKICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIHRoYXQgaGFuZGxlcyByYWRpbyBjb21tdW5pY2F0aW9ucwogICAgICAgICAgICAgICAgICAgIGluIHRoZSBjZWxsIGFuZCBjYXJyaWVzIG91dCByYWRpbyByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgYW5kIGhhbmRvdmVyIGRlY2lzaW9ucy4gVW5saWtlIDIvM0cKICAgICAgICAgICAgICAgICAgICB3aXJlbGVzcyBSQU4sIHRoZXJlIGlzIG5vIGNlbnRyYWxpemVkIHJhZGlvIG5ldHdvcmsKICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIGluIExURS4gSXQgaXMgdGhlIGhhcmR3YXJlIHRoYXQgaXMgY29ubmVjdGVkCiAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG1vYmlsZSBwaG9uZSBuZXR3b3JrIHRoYXQgY29tbXVuaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgd2l0aCBtb2JpbGUgaGFuZHNldHMgKFVzZXIgRXF1aXBtZW50KSwgbGlrZSBhIGJhc2UKICAgICAgICAgICAgICAgICAgICB0cmFuc2NlaXZlciBzdGF0aW9uIChCVFMpIGluIEdTTSBuZXR3b3Jrcy4gVGhpcyBzaW1wbGlmaWVzCiAgICAgICAgICAgICAgICAgICAgdGhlIGFyY2hpdGVjdHVyZSBhbmQgYWxsb3dzIGxvd2VyIHJlc3BvbnNlIHRpbWVzLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZmRuIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIEZ1bGwgRGlzdGluZ3Vpc2hlZCBOYW1lIChGRE4pIGlkZW50aWZpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIHRoZSBFTm9kZUJGdW5jdGlvbiBNTy4gSXQgY29udGFpbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmdWxsIHBhdGggZnJvbSB0aGUgU3VibmV0d29yayB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOb2RlQkZ1bmN0aW9uLiI7CiAgICAgICAgICAgICAgICB0eXBlIG9yLXRlaXYtdHlwZXM6XzNHUFBfRkROX1R5cGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZU5CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFTm9kZUIgSUQgdGhhdCBmb3JtcyBwYXJ0IG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQ2VsbCBHbG9iYWwgSWRlbnRpdHksIGFuZCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBub2RlIG92ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTMSBpbnRlcmZhY2UiOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBlTm9kZUJQbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFTm9kZUIgUHVibGljIExhbmQgTW9iaWxlIE5ldHdvcmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQTE1OKSBJRCB0aGF0IGZvcm1zIHBhcnQgb2YgdGhlIEVOb2RlQgogICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG5vZGUgb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFMxIGludGVyZmFjZS4gTm90ZTogVGhlIHZhbHVlIChNQ0M9MDAxLCBNTkM9MDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgUExNTiBpcyBub3QgaW5pdGlhdGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGNhbiBub3QgYmUgdXNlZCBhcyBhIHZhbGlkIFBMTU4gSWRlbnRpdHkuIjsKCiAgICAgICAgICAgICAgICBsZWFmIG1jYyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBNQ0MgcGFydCBvZiBhIFBMTU4gaWRlbnRpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSByYWRpbyBuZXR3b3JrLiI7CiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnQzMiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDAuLjk5OTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsZWFmIG1uYyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBNTkMgcGFydCBvZiBhIFBMTU4gaWRlbnRpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSByYWRpbyBuZXR3b3JrLiI7CiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnQzMiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDAuLjk5OTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsZWFmIG1uY0xlbmd0aCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBsZW5ndGggb2YgdGhlIE1OQyBwYXJ0IG9mIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTE1OIGlkZW50aXR5IHVzZWQgaW4gdGhlIHJhZGlvIG5ldHdvcmsuIjsKICAgICAgICAgICAgICAgICAgICB0eXBlIGludDMyIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgMi4uMzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBjbUlkIHsKICAgICAgICAgICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpDTV9JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IEVVdHJhbkNlbGwgewogICAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIGFuIEZERCBvciBUREQgRVV0cmFuQ2VsbCBhbmQKICAgICAgICAgICAgICAgICAgICBjb250YWlucyBwYXJhbWV0ZXJzIG5lZWRlZCBieSB0aGUgY2VsbC4KICAgICAgICAgICAgICAgICAgICBJdCBhbHNvIGNvbnRhaW5zIHBhcmFtZXRlcnMgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeSBjb21tb24gY2hhbm5lbHMuIEFuIEVVVFJBTiBzdGFuZHMKICAgICAgICAgICAgICAgICAgICBmb3IgRXZvbHZlZCBVbml2ZXJzYWwgTW9iaWxlIFRlbGVjb21tdW5pY2F0aW9ucwogICAgICAgICAgICAgICAgICAgIFN5c3RlbSAoVU1UUykgVGVycmVzdHJpYWwgUmFkaW8gQWNjZXNzIE5ldHdvcmsKICAgICAgICAgICAgICAgICAgICB3aGljaCBjb250YWlucyBhbiBlTm9kZUIuIFRoZSBlTm9kZUIgY29uY3JldGUKICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBleHRlbmRlZCBmcm9tIHRoZSBFVVRSQU4gTm9kZSBhYnN0cmFjdCBjbGFzcy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGZkbiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBGdWxsIERpc3Rpbmd1aXNoZWQgTmFtZSAoRkROKSBpZGVudGlmaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiBlaXRoZXIgdGhlIEVVdHJhbkNlbGxGREQgTU8gb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFVXRyYW5DZWxsVEREIE1PLiBJdCBjb250YWlucyB0aGUgZnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrIHRvIHRoZSBFVXRyYW5DZWxsRkREIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVXRyYW5DZWxsVERELiI7CiAgICAgICAgICAgICAgICB0eXBlIG9yLXRlaXYtdHlwZXM6XzNHUFBfRkROX1R5cGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgY2VsbElkewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJCUyBpbnRlcm5hbCBJRCBhdHRyaWJ1dGUgZm9yIEVVdHJhbkNlbGwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIHVuaXF1ZSBpbiB0aGUgUkJTLiBUb2dldGhlciB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBJRCBhbmQgUHVibGljIExhbmQgTW9iaWxlIE5ldHdvcmsgKFBMTU4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIGEgdW5pdmVyc2FsbHkgdW5pcXVlIGNlbGwgSUQiOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZWFyZmNuZGwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjaGFubmVsIG51bWJlciBmb3IgdGhlIGNlbnRyYWwgZG93bmxpbmsgZnJlcXVlbmN5LiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBlYXJmY251bCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjZW50cmFsIHVwbGluayBmcmVxdWVuY3kiOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZGxDaGFubmVsQmFuZHdpZHRoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgZG93bmxpbmsgY2hhbm5lbCBiYW5kd2lkdGggaW4gdGhlIEZERCBjZWxsLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBlYXJmY24gewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFLVVUUkEgQWJzb2x1dGUgUmFkaW8gRnJlcXVlbmN5IENoYW5uZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciAoRUFSRkNOKSBmb3IgdGhlIFRERCBjZWxsIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGNoYW5uZWxCYW5kd2lkdGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjaGFubmVsIGJhbmR3aWR0aCBpbiB0aGUgVEREIGNlbGwuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHRhYyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVHJhY2tpbmcgQXJlYSBDb2RlIGZvciB0aGUgRVV0cmFuIENlbGwiOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZHVwbGV4VHlwZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW5kaWNhdG9yIG9mIEVVdHJhbkNlbGwgdHlwZSwgRkREIG9yIFRERCI7CiAgICAgICAgICAgICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICAgICAgICAgICAgICBlbnVtIGZkZCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJGREQiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIHRkZCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUREQiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTlJTZWN0b3JDYXJyaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIE5SIFNlY3RvciBDYXJyaWVyIG9iamVjdCBwcm92aWRlcwogICAgICAgICAgICAgICAgICAgIHRoZSBhdHRyaWJ1dGVzIGZvciBkZWZpbmluZyB0aGUgbG9naWNhbAogICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcmlzdGljcyBvZiBhIGNhcnJpZXIgKGNlbGwpIGluIGEKICAgICAgICAgICAgICAgICAgICBzZWN0b3IuIEEgc2VjdG9yIGlzIGEgY292ZXJhZ2UgYXJlYSBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGJhc2Ugc3RhdGlvbiBoYXZpbmcgaXRzIG93biBhbnRlbm5hcywKICAgICAgICAgICAgICAgICAgICByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZSBjb25jZXB0CiAgICAgICAgICAgICAgICAgICAgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbAogICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZSBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcwogICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgdXNlIHRocmVlIHNlY3RvciBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGZkbiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBGdWxsIERpc3Rpbmd1aXNoZWQgTmFtZSAoRkROKSBpZGVudGlmaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiB0aGUgTlJTZWN0b3JDYXJyaWVyIE1PLiBJdCBjb250YWlucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bGwgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJTZWN0b3JDYXJyaWVyLiI7CiAgICAgICAgICAgICAgICB0eXBlIG9yLXRlaXYtdHlwZXM6XzNHUFBfRkROX1R5cGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgYXJmY25ETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQWJzb2x1dGUgUmFkaW8gRnJlcXVlbmN5IENoYW5uZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciAoTlItQVJGQ04pIGZvciBkb3dubGluayI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhcmZjblVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOUi1BUkZDTikgZm9yIHVwbGluay4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5REwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgZG93bmxpbmsgY2hhbm5lbCI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lVTCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiB1cGxpbmsgY2hhbm5lbCI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBiU0NoYW5uZWxCd0RMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJCUyBDaGFubmVsIGJhbmR3aWR0aCBpbiBNSHogZm9yIGRvd25saW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTFRFU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBMVEUgU2VjdG9yIENhcnJpZXIgb2JqZWN0IHByb3ZpZGVzIHRoZQogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgZm9yIGRlZmluaW5nIHRoZSBsb2dpY2FsIGNoYXJhY3RlcmlzdGljcwogICAgICAgICAgICAgICAgICAgIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYSBzZWN0b3IuIEEgc2VjdG9yIGlzIGEgY292ZXJhZ2UKICAgICAgICAgICAgICAgICAgICBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbiBoYXZpbmcKICAgICAgICAgICAgICAgICAgICBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuCiAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbAogICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZSBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zCiAgICAgICAgICAgICAgICAgICAgdXNlIHRocmVlIHNlY3RvciBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGZkbiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBGdWxsIERpc3Rpbmd1aXNoZWQgTmFtZSAoRkROKSBpZGVudGlmaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiB0aGUgU2VjdG9yQ2FycmllciBNTy4gSXQgY29udGFpbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmdWxsIHBhdGggZnJvbSB0aGUgU3VibmV0d29yayB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvckNhcnJpZXIuIjsKICAgICAgICAgICAgICAgIHR5cGUgb3ItdGVpdi10eXBlczpfM0dQUF9GRE5fVHlwZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBzZWN0b3JDYXJyaWVyVHlwZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBzZWN0b3IgY2FycmllcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxsZWQgYnkgTU8gU2VjdG9yQ2FycmllciBpcyBhIGRpZ2l0YWwgc2VjdG9yLiI7CiAgICAgICAgICAgICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICAgICAgICAgICAgICBlbnVtIG5vcm1hbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTm90IGEgZGlnaXRhbCBzZWN0b3IiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIGxlZnRfZGlnaXRhbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAxOwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVmdCBkaWdpdGFsIHNlY3RvciBmb3IgMkRTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSByaWdodF9kaWdpdGFsX3NlY3RvciB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSaWdodCBkaWdpdGFsIHNlY3RvciBmb3IgMkRTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSBsZWZ0X2RpZ2l0YWxfc2VjdG9yXzNkcyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDM7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZWZ0IGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIHJpZ2h0X2RpZ2l0YWxfc2VjdG9yXzNkcyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSaWdodCBkaWdpdGFsIHNlY3RvciBmb3IgM0RTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSBtaWRkbGVfZGlnaXRhbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA1OwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWlkZGxlIGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbAogICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgUkJTIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UKICAgICAgICAgICAgICAgICAgICBpbiBhIGNlcnRhaW4gZ2VvZ3JhcGhpY2FsIGFyZWEuIFRoZSBNTyBhbHNvCiAgICAgICAgICAgICAgICAgICAgY29udHJvbHMgdGhlIG1heGltdW0gb3V0cHV0IHBvd2VyIG9mIHRoZSBzZWN0b3IuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBmZG4gewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgRnVsbCBEaXN0aW5ndWlzaGVkIE5hbWUgKEZETikgaWRlbnRpZmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhlIFNlY3RvckVxdWlwbWVudEZ1bmN0aW9uIE1PLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY29udGFpbnMgdGhlIGZ1bGwgcGF0aCBmcm9tIHRoZSBTdWJuZXR3b3JrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgU2VjdG9yRXF1aXBtZW50RnVuY3Rpb24uIjsKICAgICAgICAgICAgICAgIHR5cGUgb3ItdGVpdi10eXBlczpfM0dQUF9GRE5fVHlwZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGVVdHJhbkZxQmFuZHMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2YgTFRFIGZyZXF1ZW5jeSBiYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3NvY2lhdGVkIGhhcmR3YXJlIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgZ2VyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIEdFUkFOIGZyZXF1ZW5jeSBiYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3NvY2lhdGVkIGhhcmR3YXJlIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgblJGcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIE5SIGZyZXF1ZW5jeSBiYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgU2VjdG9yIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBncm91cCBvZiBjby1sb2NhdGVkIENlbGxzIHRoYXQKICAgICAgICAgICAgICAgICAgICBoYXZlIGEgc2hhcmVkIGNvdmVyYWdlIGFyZWEuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBzZWN0b3JJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pdmVyc2FsbHkgdW5pcXVlIElEIGdlbmVyYXRlZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3RvcidzIGRpc2NvdmVyeSBtZWNoYW5pc20uIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247CgogICAgICAgICAgICBsZWFmIGF6aW11dGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkF2ZXJhZ2UgdmFsdWUgb2YgdGhlIGF6aW11dGhzIG9mIHRoZSBjZWxscwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJpc2luZyB0aGUgc2VjdG9yLCBkZXRlcm1pbmVkIGR1cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yIGRpc2NvdmVyeS4iOwogICAgICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjR7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVncmVlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgRU5PREVCRlVOQ1RJT05fUFJPVklERVNfRVVUUkFOQ0VMTCB7IC8vIDEgdG8gMC4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLWV1VHJhbkNlbGwgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZU5vZGVCIEZ1bmN0aW9uIHByb3ZpZGVzIEVVVFJBTiBDZWxsLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFTm9kZUJGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBwcm92aWRlZC1ieS1lbm9kZWJGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJFVVRSQU4gQ2VsbCBwcm92aWRlZCBieSBlTm9kZUIgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVVdHJhbkNlbGw7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgRU5PREVCRlVOQ1RJT05fUFJPVklERVNfTFRFU0VDVE9SQ0FSUklFUiB7IC8vIDEgdG8gMC4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLWx0ZVNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZU5vZGVCIEZ1bmN0aW9uIHByb3ZpZGVzIExURSBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRU5vZGVCRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktZW5vZGViRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTFRFIFNlY3RvciBDYXJyaWVyIHByb3ZpZGVkIGJ5IGVOb2RlQiBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTFRFU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBHTkJEVUZVTkNUSU9OX1BST1ZJREVTX05SQ0VMTERVIHsgLy8gMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtbnJDZWxsRHUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCLURVIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIEdOQkRVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktZ25iZHVGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIHByb3ZpZGVkIGJ5IGdOb2RlQi1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgR05CRFVGVU5DVElPTl9QUk9WSURFU19OUlNFQ1RPUkNBUlJJRVIgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCLURVIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBHTkJEVUZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHByb3ZpZGVkLWJ5LWduYmR1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgZ05vZGVCLURVIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUlNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgR05CQ1VDUEZVTkNUSU9OX1BST1ZJREVTX05SQ0VMTENVIHsgLy8gMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtbnJDZWxsQ3UgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCLUNVQ1AgRnVuY3Rpb24gcHJvdmlkZXMgTlIgQ2VsbC1DVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgR05CQ1VDUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHByb3ZpZGVkLWJ5LWduYmN1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLUNVIHByb3ZpZGVkIGJ5IGdOb2RlQi1DVUNQIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxDVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFVVRSQU5DRUxMX1VTRVNfTFRFU0VDVE9SQ0FSUklFUiB7IC8vIDAuLjEgdG8gMC4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHVzZWQtbHRlU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJFVVRSQU4gQ2VsbCB1c2VzIExURSBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRVV0cmFuQ2VsbDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB1c2VkLWJ5LWV1VHJhbkNlbGwgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTFRFIFNlY3RvciBDYXJyaWVyIHVzZWQgYnkgRVVUUkFOIENlbGwuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIExURVNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBMVEVTRUNUT1JDQVJSSUVSX1VTRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyAwLi5uIHRvIDAuLjEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgdXNlZC1hbnRlbm5hQ2FwYWJpbGl0eSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMVEUgU2VjdG9yIENhcnJpZXIgdXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIExURVNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LWx0ZVNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHVzZWQgYnkgTFRFIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SQ0VMTERVX1VTRVNfTlJTRUNUT1JDQVJSSUVSIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgdXNlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSB1c2VzIE5SIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB1c2VkLWJ5LW5yQ2VsbER1IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZWQgYnkgTlIgQ2VsbC1EVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTlJTRUNUT1JDQVJSSUVSX1VTRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyAwLi5uIHRvIDAuLjEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgdXNlZC1hbnRlbm5hQ2FwYWJpbGl0eSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBTZWN0b3IgQ2FycmllciB1c2VzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgdXNlZC1ieS1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHVzZWQgYnkgTlIgU2VjdG9yIENhcnJpZXIuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgU0VDVE9SX0dST1VQU19OUkNFTExEVSB7IC8vIDAuLjEgdG8gMC4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtbnJDZWxsRHUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiU2VjdG9yIGdyb3VwcyBOUiBDZWxsLURVLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBTZWN0b3I7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZ3JvdXBlZC1ieS1zZWN0b3IgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSBncm91cGVkIGJ5IFNlY3Rvci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX0VVVFJBTkNFTEwgeyAvLyAwLi4xIHRvIDAuLm4KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBncm91cGVkLWV1VHJhbkNlbGwgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiU2VjdG9yIGdyb3VwcyBFVVRSQU4gQ2VsbC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgU2VjdG9yOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGdyb3VwZWQtYnktc2VjdG9yIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVVVFJBTiBDZWxsIGdyb3VwZWQgYnkgU2VjdG9yLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBFVXRyYW5DZWxsOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQp9 BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-equipment urn:o-ran:smo-teiv-equipment EQUIPMENT [] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBpZXRmLWdlby1sb2NhdGlvbiB7CiAgICAgICAgcHJlZml4IGdlbzsKICAgICAgICByZWZlcmVuY2UgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsKICAgIH0KCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsKICAgIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOwogICAgZGVzY3JpcHRpb24KICAgICJSQU4gRXF1aXBtZW50IHRvcG9sb2d5IG1vZGVsLgoKICAgIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQogICAgUkFOIEVxdWlwbWVudCBkb21haW4sIHdoaWNoIGlzIG1vZGVsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHBoeXNpY2FsCiAgICBsb2NhdGlvbiBvZiBlcXVpcG1lbnQgc3VjaCBhcyBhbnRlbm5hcyBhc3NvY2lhdGVkIHdpdGggYSBjZWxsL2NhcnJpZXIKICAgIGFuZCB0aGVpciByZWxldmFudCBwcm9wZXJ0aWVzIGUuZy4gdGlsdCwgbWF4IHBvd2VyIGV0Yy4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBFUVVJUE1FTlQ7CgogICAgbGlzdCBBbnRlbm5hTW9kdWxlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQW4gQW50ZW5uYSBNb2R1bGUgcmVwcmVzZW50cyB0aGUKICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBhc3BlY3Qgb2YgYW4gYW50ZW5uYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGZkbiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBGdWxsIERpc3Rpbmd1aXNoZWQgTmFtZSAoRkROKSBpZGVudGlmaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYVN1YlVuaXQgTU8uIEl0IGNvbnRhaW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnVsbCBwYXRoIGZyb20gdGhlIFN1Ym5ldHdvcmsgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnRlbm5hU3ViVW5pdC4iOwogICAgICAgICAgICAgICAgdHlwZSBvci10ZWl2LXR5cGVzOl8zR1BQX0ZETl9UeXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGFudGVubmFNb2RlbE51bWJlciB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVmVuZG9yLXNwZWNpZmljIGFudGVubmEgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIuIFRoaXMgYXR0cmlidXRlIGlzIHBhcnQgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFJU0cgdjMgQURCIFN0YW5kYXJkIGFuZCBoYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIG9wZXJhdGlvbmFsIGltcGFjdC4iOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbWVjaGFuaWNhbEFudGVubmFCZWFyaW5nIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIGJlYXJpbmcgb24gYW50ZW5uYSBzdWJ1bml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhbnRlbm5hIHVuaXQgaXMgaW5zdGFsbGVkLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYVRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBmaXhlZCBhbnRlbm5hIHRpbHQgb2YgdGhlIGluc3RhbGxhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgdGhlIGluY2xpbmF0aW9uIG9mIHRoZSBhbnRlbm5hCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50IHJlc3BlY3QgdG8gdGhlIHZlcnRpY2FsIHBsYW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYSBzaWduZWQgdmFsdWUuIFBvc2l0aXZlIGluZGljYXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bnRpbHQsIGFuZCBuZWdhdGl2ZSBpbmRpY2F0ZXMgdXB0aWx0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBwb3NpdGlvbldpdGhpblNlY3RvciB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSB1bml0IHBvc2l0aW9uIHdpdGhpbiBzZWN0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpcyBwYXJ0IG9mIEFJU0cgdjMgQURCCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBhbmQgaGFzIG5vIG9wZXJhdGlvbmFsIGltcGFjdC4iOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgdG90YWxUaWx0IHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUb3RhbCBhbnRlbm5hIGVsZXZhdGlvbiBpbmNsdWRpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgdGlsdCBhbmQgdGhlIHRpbHQgYXBwbGllZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFJlbW90ZSBFbGVjdHJpY2FsIFRpbHQgKFJFVCkuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGVsZWN0cmljYWxBbnRlbm5hVGlsdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiRWxlY3RyaWNhbGx5LWNvbnRyb2xsZWQgdGlsdCBvZiBtYWluIGJlYW0gbWF4aW11bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCByZXNwZWN0IHRvIGRpcmVjdGlvbiBvcnRob2dvbmFsIHRvIGFudGVubmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgYXhpcyAoc2VlIDNHUFAgVFMgMjUuNDY2KS4gVmFsdWUgaXMgc2lnbmVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsdCBkb3duIGlzIHBvc2l0aXZlLCB0aWx0IHVwIGlzIG5lZ2F0aXZlLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGFudGVubmFCZWFtV2lkdGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYSByYWRpYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiBpbiB0aGUgaG9yaXpvbnRhbCBwbGFuZS4gTWVhc3VyZWQgaW4gZGVncmVlcy4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKCiAgICAgICAgICAgIGNvbnRhaW5lciBjbUlkIHsKICAgICAgICAgICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpDTV9JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IFNpdGUgewogICAgICAgIGRlc2NyaXB0aW9uICJBIHNpdGUgaXMgYSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSBhbiBBbnRlbm5hIG9yCiAgICAgICAgICAgICAgICAgICAgUGh5c2ljYWwgTkYgY2FuIGJlIGluc3RhbGxlZC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgU2l0ZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgUGh5c2ljYWxORiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYSBQaHlzaWNhbCBORiwKICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c2VkIHRvIHJlYWxpc2UgTmV0d29yayBGdW5jdGlvbnMuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIFBoeXNpY2FsIE5GLiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiB0eXBlIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUeXBlIG9mIFBoeXNpY2FsIE5GLiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwoKICAgICAgICAgICAgY29udGFpbmVyIGNtSWQgewogICAgICAgICAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOkNNX0lEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9JTlNUQUxMRURfQVRfU0lURSB7IC8vIDAuLm4gdG8gMC4uMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiBpbnN0YWxsZWQtYXQtc2l0ZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBpbnN0YWxsZWQgYXQgU2l0ZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGluc3RhbGxlZC1hbnRlbm5hTW9kdWxlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlNpdGUgd2hlcmUgQW50ZW5uYSBNb2R1bGUgaXMgaW5zdGFsbGVkLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBTaXRlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgUEhZU0lDQUxORl9JTlNUQUxMRURfQVRfU0lURSB7IC8vIDEuLm4gdG8gMC4uMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiBpbnN0YWxsZWQtYXQtc2l0ZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBORiBpbnN0YWxsZWQgYXQgU2l0ZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgUGh5c2ljYWxORjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGluc3RhbGxlZC1waHlzaWNhbE5GIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlNpdGUgd2hlcmUgUGh5c2ljYWwgTkYgaXMgaW5zdGFsbGVkLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBTaXRlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICAgIH0KICAgIH0KfQ== BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-cloud-to-ran urn:o-ran:smo-teiv-cloud-to-ran CLOUD_TO_RAN ["o-ran-smo-teiv-cloud", "o-ran-smo-teiv-ran"] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkLXRvLXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtY2xvdWQtdG8tcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LWNsb3VkdG9yYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHtwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNsb3VkIHtwcmVmaXggb3ItdGVpdi1jbG91ZDsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4ge3ByZWZpeCBvci10ZWl2LXJhbjsgfQoKICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogICAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiBDbG91ZCB0byBSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIENsb3VkIHRvIFJBTiBMb2dpY2FsIHRvcG9sb2d5IHJlbGF0aW9ucyI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIENMT1VEX1RPX1JBTjsKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfR05CRFVGVU5DVElPTiB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWduYmR1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCRFUgRnVuY3Rpb24gc2VydmljZWQgYnkgdGhpcyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWNsb3VkOk5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgdGhhdCBzZXJ2ZXMgdGhpcyBnTm9kZUJEVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46R05CRFVGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfR05CQ1VDUEZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtZ25iY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQi1DVS1DUCBGdW5jdGlvbiBzZXJ2aWNlZCBieSB0aGlzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtY2xvdWQ6TkZEZXBsb3ltZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIGdOb2RlQkNVQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkdOQkNVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfR05CQ1VVUEZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtZ25iY3V1cEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQi1DVS1VUCBGdW5jdGlvbiBzZXJ2aWNlZCBieSB0aGlzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtY2xvdWQ6TkZEZXBsb3ltZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIGdOb2RlQkNVVVAgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkdOQkNVVVBGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ== BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-cloud urn:o-ran:smo-teiv-cloud CLOUD [] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jbG91ZCI7CiAgICBwcmVmaXggb3ItdGVpdi1jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiUkFOIENsb3VkIHRvcG9sb2d5IG1vZGVsLgoKICAgIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQogICAgUkFOIENMT1VEIGRvbWFpbiwgd2hpY2ggY29tcHJpc2VzIGNsb3VkIGluZnJhc3RydWN0dXJlIGFuZAogICAgZGVwbG95bWVudCBhc3BlY3RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHRvcG9sb2d5IG1vZGVsLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIENMT1VEOwoKICAgIGxpc3QgQ2xvdWRpZmllZE5GIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBSQU4gTmV0d29yayBGdW5jdGlvbiBzb2Z0d2FyZSB0aGF0IGlzIGRlcGxveWVkIGluIHRoZSBPLUNsb3VkIHZpYSBvbmUgb3IgbW9yZSBORiBEZXBsb3ltZW50cy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWRpZmllZCBORiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5GRGVwbG95bWVudCB7CiAgICAgICAgZGVzY3JpcHRpb24gIkEgc29mdHdhcmUgZGVwbG95bWVudCBvbiBPLUNsb3VkIHJlc291cmNlcyB0aGF0IHJlYWxpemVzLCBhbGwgb3IgcGFydCBvZiwgYSBDbG91ZGlmaWVkIE5GLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBORiBEZXBsb3ltZW50IjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQ2xvdWROYW1lc3BhY2UgewogICAgICAgIGRlc2NyaXB0aW9uICJDbG91ZE5hbWVzcGFjZSBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBpc29sYXRpbmcKICAgICAgICAgICAgICAgICAgICBncm91cHMgb2YgcmVzb3VyY2VzIHdpdGhpbiBhIHNpbmdsZSBjbHVzdGVyLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBDbG91ZCBOYW1lc3BhY2UiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOb2RlQ2x1c3RlciB7CiAgICAgICAgZGVzY3JpcHRpb24gIkEgTm9kZUNsdXN0ZXIgbWFuYWdlcyBhIGNvbGxlY3Rpb24gb2YgTm9kZXMuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIE5vZGUgQ2x1c3RlciI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IENsb3VkU2l0ZSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgdGhlIGluZnJhc3RydWN0dXJlIHRoYXQKICAgICAgICAgICAgICAgICAgICBob3N0cyB0aGUgTkYgRGVwbG95bWVudC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWQgU2l0ZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBDTE9VRElGSUVETkZfQ09NUFJJU0VTX05GREVQTE9ZTUVOVCB7IC8vIDEgdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGNvbXByaXNlZC1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWRpZmllZCBORiBjb21wcmlzZXMgb2YgdGhlc2UgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQ2xvdWRpZmllZE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBjb21wcmlzZWQtYnktY2xvdWRpZmllZE5GIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgcGFydCBvZiBDbG91ZGlmaWVkIE5GLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX0RFUExPWUVEX09OX0NMT1VETkFNRVNQQUNFIHsgLy8gMS4ubiB0byAxLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtb24tY2xvdWROYW1lc3BhY2UgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCBkZXBsb3llZCBvbiBDbG91ZCBOYW1lc3BhY2UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBkZXBsb3llZC1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWQgTmFtZXNwYWNlIGRlcGxveXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQ2xvdWROYW1lc3BhY2U7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQ0xPVUROQU1FU1BBQ0VfREVQTE9ZRURfT05fTk9ERUNMVVNURVIgeyAvLyAxLi5uIHRvIDEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgZGVwbG95ZWQtb24tbm9kZUNsdXN0ZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWQgTmFtZXNwYWNlIGRlcGxveWVkIG9uIE5vZGUgQ2x1c3Rlci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQ2xvdWROYW1lc3BhY2U7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtY2xvdWROYW1lc3BhY2UgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTm9kZSBDbHVzdGVyIGRlcGxveXMgQ2xvdWQgTmFtZXNwYWNlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOb2RlQ2x1c3RlcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBOT0RFQ0xVU1RFUl9MT0NBVEVEX0FUX0NMT1VEU0lURSB7IC8vIDEuLm4gdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGxvY2F0ZWQtYXQtY2xvdWRTaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5vZGUgQ2x1c3RlciBsb2NhdGVkIGF0IENsb3VkIFNpdGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE5vZGVDbHVzdGVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGxvY2F0aW9uLW9mLW5vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkNsb3VkIFNpdGUgaXMgbG9jYXRpb24gb2YgTm9kZSBDbHVzdGVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBDbG91ZFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQp9 BUILT_IN_MODULE IN_USAGE
+o-ran-smo-teiv-equipment-to-ran urn:o-ran:smo-teiv-equipment-to-ran EQUIPMENT_TO_RAN ["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"] 2024-05-02 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudC10by1yYW4gewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWVxdWlwbWVudC10by1yYW4iOwogICAgcHJlZml4IG9yLXRlaXYtZXF1aXB0b3JhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHtwcmVmaXggb3ItdGVpdi1lcXVpcDsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4ge3ByZWZpeCBvci10ZWl2LXJhbjsgfQoKICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogICAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiBFcXVpcG1lbnQgdG8gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIEVxdWlwbWVudCB0byBMb2dpY2FsIHRvcG9sb2d5CiAgICBlbnRpdGllcyBhbmQgcmVsYXRpb25zLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIEVRVUlQTUVOVF9UT19SQU47CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBQSFlTSUNBTE5GX1NFUlZFU19HTkJEVUZVTkNUSU9OIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtZ25iZHVGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJnTm9kZUItRFUgRnVuY3Rpb24gc2VydmljZWQgYnkgdGhpcyBQaHlzaWNhbCBORi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1lcXVpcDpQaHlzaWNhbE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHNlcnZpbmctcGh5c2ljYWxORiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBORiBzZXJ2ZXMgdGhpcyBnTm9kZUItRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkdOQkRVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBQSFlTSUNBTE5GX1NFUlZFU19HTkJDVUNQRlVOQ1RJT04geyAvLyAwLi4xIHRvIDAuLm4KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1nbmJjdWNwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZ05vZGVCLUNVQ1AgRnVuY3Rpb24gc2VydmljZWQgYnkgdGhpcyBQaHlzaWNhbCBORi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1lcXVpcDpQaHlzaWNhbE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHNlcnZpbmctcGh5c2ljYWxORiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBORiBzZXJ2ZXMgdGhpcyBnTm9kZUItQ1VDUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46R05CQ1VDUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgUEhZU0lDQUxORl9TRVJWRVNfR05CQ1VVUEZVTkNUSU9OIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtZ25iY3V1cEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQi1DVVVQIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgUGh5c2ljYWwgTkYuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6UGh5c2ljYWxORjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBzZXJ2aW5nLXBoeXNpY2FsTkYgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiUGh5c2ljYWwgTkYgc2VydmVzIHRoaXMgZ05vZGVCLUNVVVAgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkdOQkNVVVBGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIFBIWVNJQ0FMTkZfU0VSVkVTX0VOT0RFQkZVTkNUSU9OIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtZW5vZGViRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZU5vZGVCIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgUGh5c2ljYWwgTkYuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6UGh5c2ljYWxORjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBzZXJ2aW5nLXBoeXNpY2FsTkYgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiUGh5c2ljYWwgTkYgc2VydmVzIHRoaXMgZU5vZGVCIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpFTm9kZUJGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgU0VDVE9SX0dST1VQU19BTlRFTk5BTU9EVUxFIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZ3JvdXBlZC1hbnRlbm5hTW9kdWxlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlNlY3RvciBncm91cHMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtcmFuOlNlY3RvcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBncm91cGVkLWJ5LXNlY3RvciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBncm91cGVkIGJ5IFNlY3Rvci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1lcXVpcDpBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQp9 BUILT_IN_MODULE IN_USAGE
+\.
+
+COPY ties_model.entity_info("name", "moduleReferenceName") FROM stdin;
+GNBCUUPFunction o-ran-smo-teiv-ran
+ENodeBFunction o-ran-smo-teiv-ran
+Sector o-ran-smo-teiv-ran
+LTESectorCarrier o-ran-smo-teiv-ran
+NRCellDU o-ran-smo-teiv-ran
+GNBDUFunction o-ran-smo-teiv-ran
+NRCellCU o-ran-smo-teiv-ran
+EUtranCell o-ran-smo-teiv-ran
+GNBCUCPFunction o-ran-smo-teiv-ran
+NRSectorCarrier o-ran-smo-teiv-ran
+AntennaCapability o-ran-smo-teiv-ran
+CloudNamespace o-ran-smo-teiv-cloud
+NodeCluster o-ran-smo-teiv-cloud
+CloudSite o-ran-smo-teiv-cloud
+NFDeployment o-ran-smo-teiv-cloud
+CloudifiedNF o-ran-smo-teiv-cloud
+ManagedElement o-ran-smo-teiv-oam
+Site o-ran-smo-teiv-equipment
+AntennaModule o-ran-smo-teiv-equipment
+PhysicalNF o-ran-smo-teiv-equipment
+\.
+
+COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "relationshipDataLocation", "connectSameEntity", "moduleReferenceName") FROM stdin;
+ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER provided-lteSectorCarrier ENodeBFunction 1 1 provided-by-enodebFunction LTESectorCarrier 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+ENODEBFUNCTION_PROVIDES_EUTRANCELL provided-euTranCell ENodeBFunction 1 1 provided-by-enodebFunction EUtranCell 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+SECTOR_GROUPS_EUTRANCELL grouped-euTranCell Sector 0 1 grouped-by-sector EUtranCell 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+SECTOR_GROUPS_ANTENNAMODULE grouped-antennaModule Sector 0 1 grouped-by-sector AntennaModule 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-equipment-to-ran
+SECTOR_GROUPS_NRCELLDU grouped-nrCellDu Sector 0 1 grouped-by-sector NRCellDU 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+LTESECTORCARRIER_USES_ANTENNACAPABILITY used-antennaCapability LTESectorCarrier 0 9223372036854775807 used-by-lteSectorCarrier AntennaCapability 0 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-ran
+NRCELLDU_USES_NRSECTORCARRIER used-nrSectorCarrier NRCellDU 0 1 used-by-nrCellDu NRSectorCarrier 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER provided-nrSectorCarrier GNBDUFunction 1 1 provided-by-gnbduFunction NRSectorCarrier 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+GNBDUFUNCTION_PROVIDES_NRCELLDU provided-nrCellDu GNBDUFunction 1 1 provided-by-gnbduFunction NRCellDU 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+EUTRANCELL_USES_LTESECTORCARRIER used-lteSectorCarrier EUtranCell 0 1 used-by-euTranCell LTESectorCarrier 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+GNBCUCPFUNCTION_PROVIDES_NRCELLCU provided-nrCellCu GNBCUCPFunction 1 1 provided-by-gnbcucpFunction NRCellCU 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-ran
+NRSECTORCARRIER_USES_ANTENNACAPABILITY used-antennaCapability NRSectorCarrier 0 9223372036854775807 used-by-nrSectorCarrier AntennaCapability 0 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-ran
+CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER deployed-on-nodeCluster CloudNamespace 1 9223372036854775807 deployed-cloudNamespace NodeCluster 1 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-cloud
+NODECLUSTER_LOCATED_AT_CLOUDSITE located-at-cloudSite NodeCluster 1 9223372036854775807 location-of-nodeCluster CloudSite 1 9223372036854775807 BI_DIRECTIONAL RELATION false o-ran-smo-teiv-cloud
+NFDEPLOYMENT_SERVES_GNBDUFUNCTION serviced-gnbduFunction NFDeployment 0 9223372036854775807 serving-nFDeployment GNBDUFunction 0 9223372036854775807 BI_DIRECTIONAL RELATION false o-ran-smo-teiv-cloud-to-ran
+NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE deployed-on-cloudNamespace NFDeployment 1 9223372036854775807 deployed-nFDeployment CloudNamespace 1 9223372036854775807 BI_DIRECTIONAL RELATION false o-ran-smo-teiv-cloud
+NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION serviced-gnbcuupFunction NFDeployment 0 9223372036854775807 serving-nFDeployment GNBCUUPFunction 0 9223372036854775807 BI_DIRECTIONAL RELATION false o-ran-smo-teiv-cloud-to-ran
+NFDEPLOYMENT_SERVES_MANAGEDELEMENT serviced-managedElement NFDeployment 1 9223372036854775807 serving-nFDeployment ManagedElement 1 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-oam-to-cloud
+NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION serviced-gnbcucpFunction NFDeployment 0 9223372036854775807 serving-nFDeployment GNBCUCPFunction 0 9223372036854775807 BI_DIRECTIONAL RELATION false o-ran-smo-teiv-cloud-to-ran
+CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT comprised-nFDeployment CloudifiedNF 1 1 comprised-by-cloudifiedNF NFDeployment 1 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-cloud
+MANAGEDELEMENT_MANAGES_ENODEBFUNCTION managed-enodebFunction ManagedElement 1 1 managed-by-managedElement ENodeBFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-oam-to-ran
+MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF deployed-as-cloudifiedNF ManagedElement 1 1 deployed-managedElement CloudifiedNF 0 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-oam-to-cloud
+MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION managed-gnbcucpFunction ManagedElement 1 1 managed-by-managedElement GNBCUCPFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-oam-to-ran
+MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION managed-gnbcuupFunction ManagedElement 1 1 managed-by-managedElement GNBCUUPFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-oam-to-ran
+MANAGEDELEMENT_MANAGES_GNBDUFUNCTION managed-gnbduFunction ManagedElement 1 1 managed-by-managedElement GNBDUFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-oam-to-ran
+ANTENNAMODULE_INSTALLED_AT_SITE installed-at-site AntennaModule 0 9223372036854775807 installed-antennaModule Site 0 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-equipment
+ANTENNAMODULE_SERVES_ANTENNACAPABILITY serviced-antennaCapability AntennaModule 0 9223372036854775807 serving-antennaModule AntennaCapability 0 9223372036854775807 BI_DIRECTIONAL RELATION false o-ran-smo-teiv-equipment-to-ran
+PHYSICALNF_INSTALLED_AT_SITE installed-at-site PhysicalNF 1 9223372036854775807 installed-physicalNF Site 0 1 BI_DIRECTIONAL A_SIDE false o-ran-smo-teiv-equipment
+PHYSICALNF_SERVES_GNBDUFUNCTION serviced-gnbduFunction PhysicalNF 0 1 serving-physicalNF GNBDUFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-equipment-to-ran
+PHYSICALNF_SERVES_ENODEBFUNCTION serviced-enodebFunction PhysicalNF 0 1 serving-physicalNF ENodeBFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-equipment-to-ran
+PHYSICALNF_SERVES_GNBCUUPFUNCTION serviced-gnbcuupFunction PhysicalNF 0 1 serving-physicalNF GNBCUUPFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-equipment-to-ran
+PHYSICALNF_SERVES_GNBCUCPFUNCTION serviced-gnbcucpFunction PhysicalNF 0 1 serving-physicalNF GNBCUCPFunction 0 9223372036854775807 BI_DIRECTIONAL B_SIDE false o-ran-smo-teiv-equipment-to-ran
+\.
+
+;
+
+COMMIT;
--- /dev/null
+--
+-- ============LICENSE_START=======================================================
+-- Copyright (C) 2024 Ericsson
+-- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+-- ================================================================================
+-- 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.
+--
+-- SPDX-License-Identifier: Apache-2.0
+-- ============LICENSE_END=========================================================
+--
+
+BEGIN;
+
+CREATE EXTENSION IF NOT EXISTS postgis;
+CREATE EXTENSION IF NOT EXISTS postgis_topology;
+
+GRANT USAGE ON SCHEMA topology TO topology_exposure_user;
+GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO topology_exposure_user;
+GRANT SELECT ON ALL TABLES IN SCHEMA topology TO topology_exposure_user;
+
+CREATE SCHEMA IF NOT EXISTS ties_data;
+ALTER SCHEMA ties_data OWNER TO topology_exposure_user;
+SET default_tablespace = '';
+SET default_table_access_method = heap;
+
+SET ROLE 'topology_exposure_user';
+
+-- Function to create CONSTRAINT only if it does not exists
+CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+ t_name TEXT, c_name TEXT, constraint_sql TEXT
+)
+RETURNS void AS
+$$
+BEGIN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_name = t_name AND constraint_name = c_name) THEN
+ EXECUTE constraint_sql;
+ END IF;
+END;
+$$ language 'plpgsql';
+
+-- Update data schema exec status
+INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_data', 'success');
+
+CREATE TABLE IF NOT EXISTS ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" (
+ "id" VARCHAR(511),
+ "aSide_AntennaModule" VARCHAR(511),
+ "bSide_AntennaCapability" VARCHAR(511),
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."AntennaCapability" (
+ "id" VARCHAR(511),
+ "nRFqBands" jsonb,
+ "cmId" jsonb,
+ "geranFqBands" jsonb,
+ "fdn" TEXT,
+ "eUtranFqBands" jsonb,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."AntennaModule" (
+ "id" VARCHAR(511),
+ "totalTilt" BIGINT,
+ "cmId" jsonb,
+ "antennaBeamWidth" jsonb,
+ "positionWithinSector" TEXT,
+ "geo-location" geography,
+ "mechanicalAntennaBearing" BIGINT,
+ "fdn" TEXT,
+ "electricalAntennaTilt" BIGINT,
+ "mechanicalAntennaTilt" BIGINT,
+ "antennaModelNumber" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_grouped-by-sector" VARCHAR(511),
+ "REL_ID_SECTOR_GROUPS_ANTENNAMODULE" VARCHAR(511),
+ "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" jsonb,
+ "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" jsonb,
+ "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" jsonb,
+ "REL_FK_installed-at-site" VARCHAR(511),
+ "REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE" VARCHAR(511),
+ "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" jsonb,
+ "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" jsonb,
+ "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" jsonb
+);
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."CloudNamespace" (
+ "id" VARCHAR(511),
+ "name" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_deployed-on-nodeCluster" VARCHAR(511),
+ "REL_ID_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" VARCHAR(511),
+ "REL_CD_sourceIds_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" jsonb,
+ "REL_CD_classifiers_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" jsonb,
+ "REL_CD_decorators_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" jsonb
+);
+
+ALTER TABLE ONLY ties_data."CloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."CloudNamespace" ALTER COLUMN "REL_CD_sourceIds_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudNamespace" ALTER COLUMN "REL_CD_classifiers_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudNamespace" ALTER COLUMN "REL_CD_decorators_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."CloudSite" (
+ "id" VARCHAR(511),
+ "name" TEXT,
+ "geo-location" geography,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."CloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."CloudifiedNF" (
+ "id" VARCHAR(511),
+ "name" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."ENodeBFunction" (
+ "id" VARCHAR(511),
+ "fdn" TEXT,
+ "cmId" jsonb,
+ "eNodeBPlmnId" jsonb,
+ "eNBId" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_managed-by-managedElement" VARCHAR(511),
+ "REL_ID_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" jsonb,
+ "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" jsonb,
+ "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" jsonb,
+ "REL_FK_serving-physicalNF" VARCHAR(511),
+ "REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_PHYSICALNF_SERVES_ENODEBFUNCTION" jsonb,
+ "REL_CD_classifiers_PHYSICALNF_SERVES_ENODEBFUNCTION" jsonb,
+ "REL_CD_decorators_PHYSICALNF_SERVES_ENODEBFUNCTION" jsonb
+);
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "REL_CD_sourceIds_PHYSICALNF_SERVES_ENODEBFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "REL_CD_classifiers_PHYSICALNF_SERVES_ENODEBFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "REL_CD_decorators_PHYSICALNF_SERVES_ENODEBFUNCTION" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."EUtranCell" (
+ "id" VARCHAR(511),
+ "earfcndl" BIGINT,
+ "earfcnul" BIGINT,
+ "cmId" jsonb,
+ "tac" BIGINT,
+ "dlChannelBandwidth" BIGINT,
+ "fdn" TEXT,
+ "cellId" BIGINT,
+ "duplexType" TEXT,
+ "channelBandwidth" BIGINT,
+ "earfcn" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_provided-by-enodebFunction" VARCHAR(511),
+ "REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL" VARCHAR(511),
+ "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_EUTRANCELL" jsonb,
+ "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_EUTRANCELL" jsonb,
+ "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_EUTRANCELL" jsonb,
+ "REL_FK_grouped-by-sector" VARCHAR(511),
+ "REL_ID_SECTOR_GROUPS_EUTRANCELL" VARCHAR(511),
+ "REL_CD_sourceIds_SECTOR_GROUPS_EUTRANCELL" jsonb,
+ "REL_CD_classifiers_SECTOR_GROUPS_EUTRANCELL" jsonb,
+ "REL_CD_decorators_SECTOR_GROUPS_EUTRANCELL" jsonb
+);
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_EUTRANCELL" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_EUTRANCELL" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_EUTRANCELL" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_EUTRANCELL" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_EUTRANCELL" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."EUtranCell" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_EUTRANCELL" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."GNBCUCPFunction" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "pLMNId" jsonb,
+ "gNBIdLength" BIGINT,
+ "fdn" TEXT,
+ "gNBCUName" TEXT,
+ "gNBId" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_managed-by-managedElement" VARCHAR(511),
+ "REL_ID_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" jsonb,
+ "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" jsonb,
+ "REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" jsonb,
+ "REL_FK_serving-physicalNF" VARCHAR(511),
+ "REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUCPFUNCTION" jsonb,
+ "REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUCPFUNCTION" jsonb,
+ "REL_CD_decorators_PHYSICALNF_SERVES_GNBCUCPFUNCTION" jsonb
+);
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUCPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUCPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUCPFunction" ALTER COLUMN "REL_CD_decorators_PHYSICALNF_SERVES_GNBCUCPFUNCTION" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."GNBCUUPFunction" (
+ "id" VARCHAR(511),
+ "fdn" TEXT,
+ "cmId" jsonb,
+ "gNBIdLength" BIGINT,
+ "gNBId" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_managed-by-managedElement" VARCHAR(511),
+ "REL_ID_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" jsonb,
+ "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" jsonb,
+ "REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" jsonb,
+ "REL_FK_serving-physicalNF" VARCHAR(511),
+ "REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUUPFUNCTION" jsonb,
+ "REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUUPFUNCTION" jsonb,
+ "REL_CD_decorators_PHYSICALNF_SERVES_GNBCUUPFUNCTION" jsonb
+);
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_PHYSICALNF_SERVES_GNBCUUPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "REL_CD_classifiers_PHYSICALNF_SERVES_GNBCUUPFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBCUUPFunction" ALTER COLUMN "REL_CD_decorators_PHYSICALNF_SERVES_GNBCUUPFUNCTION" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."GNBDUFunction" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "gNBIdLength" BIGINT,
+ "dUpLMNId" jsonb,
+ "fdn" TEXT,
+ "gNBDUId" BIGINT,
+ "gNBId" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_managed-by-managedElement" VARCHAR(511),
+ "REL_ID_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" jsonb,
+ "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" jsonb,
+ "REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" jsonb,
+ "REL_FK_serving-physicalNF" VARCHAR(511),
+ "REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION" VARCHAR(511),
+ "REL_CD_sourceIds_PHYSICALNF_SERVES_GNBDUFUNCTION" jsonb,
+ "REL_CD_classifiers_PHYSICALNF_SERVES_GNBDUFUNCTION" jsonb,
+ "REL_CD_decorators_PHYSICALNF_SERVES_GNBDUFUNCTION" jsonb
+);
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "REL_CD_sourceIds_PHYSICALNF_SERVES_GNBDUFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "REL_CD_classifiers_PHYSICALNF_SERVES_GNBDUFUNCTION" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "REL_CD_decorators_PHYSICALNF_SERVES_GNBDUFUNCTION" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."LTESectorCarrier" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "fdn" TEXT,
+ "sectorCarrierType" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_provided-by-enodebFunction" VARCHAR(511),
+ "REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" VARCHAR(511),
+ "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb,
+ "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb,
+ "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb,
+ "REL_FK_used-antennaCapability" VARCHAR(511),
+ "REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY" VARCHAR(511),
+ "REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
+ "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
+ "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
+ "REL_FK_used-by-euTranCell" VARCHAR(511),
+ "REL_ID_EUTRANCELL_USES_LTESECTORCARRIER" VARCHAR(511),
+ "REL_CD_sourceIds_EUTRANCELL_USES_LTESECTORCARRIER" jsonb,
+ "REL_CD_classifiers_EUTRANCELL_USES_LTESECTORCARRIER" jsonb,
+ "REL_CD_decorators_EUTRANCELL_USES_LTESECTORCARRIER" jsonb
+);
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_EUTRANCELL_USES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_EUTRANCELL_USES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_EUTRANCELL_USES_LTESECTORCARRIER" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."ManagedElement" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "fdn" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_deployed-as-cloudifiedNF" VARCHAR(511),
+ "REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" VARCHAR(511),
+ "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" jsonb,
+ "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" jsonb,
+ "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" jsonb
+);
+
+ALTER TABLE ONLY ties_data."ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" (
+ "id" VARCHAR(511),
+ "aSide_NFDeployment" VARCHAR(511),
+ "bSide_CloudNamespace" VARCHAR(511),
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" (
+ "id" VARCHAR(511),
+ "aSide_NFDeployment" VARCHAR(511),
+ "bSide_GNBCUCPFunction" VARCHAR(511),
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" (
+ "id" VARCHAR(511),
+ "aSide_NFDeployment" VARCHAR(511),
+ "bSide_GNBCUUPFunction" VARCHAR(511),
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" (
+ "id" VARCHAR(511),
+ "aSide_NFDeployment" VARCHAR(511),
+ "bSide_GNBDUFunction" VARCHAR(511),
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NFDeployment" (
+ "id" VARCHAR(511),
+ "name" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_serviced-managedElement" VARCHAR(511),
+ "REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" VARCHAR(511),
+ "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" jsonb,
+ "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" jsonb,
+ "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" jsonb,
+ "REL_FK_comprised-by-cloudifiedNF" VARCHAR(511),
+ "REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" VARCHAR(511),
+ "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" jsonb,
+ "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" jsonb,
+ "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" (
+ "id" VARCHAR(511),
+ "aSide_NodeCluster" VARCHAR(511),
+ "bSide_CloudSite" VARCHAR(511),
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NRCellCU" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "fdn" TEXT,
+ "nCI" BIGINT,
+ "nRTAC" BIGINT,
+ "plmnId" jsonb,
+ "cellLocalId" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_provided-by-gnbcucpFunction" VARCHAR(511),
+ "REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" VARCHAR(511),
+ "REL_CD_sourceIds_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" jsonb,
+ "REL_CD_classifiers_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" jsonb,
+ "REL_CD_decorators_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NRCellCU" ALTER COLUMN "REL_CD_sourceIds_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellCU" ALTER COLUMN "REL_CD_classifiers_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellCU" ALTER COLUMN "REL_CD_decorators_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NRCellDU" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "nCI" BIGINT,
+ "nRPCI" BIGINT,
+ "fdn" TEXT,
+ "cellLocalId" BIGINT,
+ "nRTAC" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_grouped-by-sector" VARCHAR(511),
+ "REL_ID_SECTOR_GROUPS_NRCELLDU" VARCHAR(511),
+ "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" jsonb,
+ "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" jsonb,
+ "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" jsonb,
+ "REL_FK_provided-by-gnbduFunction" VARCHAR(511),
+ "REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU" VARCHAR(511),
+ "REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRCELLDU" jsonb,
+ "REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRCELLDU" jsonb,
+ "REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRCELLDU" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRCellDU" ALTER COLUMN "REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NRSectorCarrier" (
+ "id" VARCHAR(511),
+ "bSChannelBwDL" BIGINT,
+ "cmId" jsonb,
+ "arfcnDL" BIGINT,
+ "frequencyUL" BIGINT,
+ "fdn" TEXT,
+ "arfcnUL" BIGINT,
+ "frequencyDL" BIGINT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_used-by-nrCellDu" VARCHAR(511),
+ "REL_ID_NRCELLDU_USES_NRSECTORCARRIER" VARCHAR(511),
+ "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" jsonb,
+ "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" jsonb,
+ "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" jsonb,
+ "REL_FK_provided-by-gnbduFunction" VARCHAR(511),
+ "REL_ID_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" VARCHAR(511),
+ "REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" jsonb,
+ "REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" jsonb,
+ "REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" jsonb,
+ "REL_FK_used-antennaCapability" VARCHAR(511),
+ "REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY" VARCHAR(511),
+ "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
+ "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
+ "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."NodeCluster" (
+ "id" VARCHAR(511),
+ "name" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."PhysicalNF" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "geo-location" geography,
+ "name" TEXT,
+ "type" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb,
+ "REL_FK_installed-at-site" VARCHAR(511),
+ "REL_ID_PHYSICALNF_INSTALLED_AT_SITE" VARCHAR(511),
+ "REL_CD_sourceIds_PHYSICALNF_INSTALLED_AT_SITE" jsonb,
+ "REL_CD_classifiers_PHYSICALNF_INSTALLED_AT_SITE" jsonb,
+ "REL_CD_decorators_PHYSICALNF_INSTALLED_AT_SITE" jsonb
+);
+
+ALTER TABLE ONLY ties_data."PhysicalNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."PhysicalNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."PhysicalNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."PhysicalNF" ALTER COLUMN "REL_CD_sourceIds_PHYSICALNF_INSTALLED_AT_SITE" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."PhysicalNF" ALTER COLUMN "REL_CD_classifiers_PHYSICALNF_INSTALLED_AT_SITE" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."PhysicalNF" ALTER COLUMN "REL_CD_decorators_PHYSICALNF_INSTALLED_AT_SITE" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+ "id" VARCHAR(511),
+ "geo-location" geography,
+ "sectorId" BIGINT,
+ "azimuth" DECIMAL,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."Site" (
+ "id" VARCHAR(511),
+ "cmId" jsonb,
+ "geo-location" geography,
+ "name" TEXT,
+ "CD_sourceIds" jsonb,
+ "CD_classifiers" jsonb,
+ "CD_decorators" jsonb
+);
+
+ALTER TABLE ONLY ties_data."Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ANTENNAMODULE_SERVES_ANTENNACAPABILITY',
+ 'PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id',
+ 'ALTER TABLE ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'AntennaCapability',
+ 'PK_AntennaCapability_id',
+ 'ALTER TABLE ties_data."AntennaCapability" ADD CONSTRAINT "PK_AntennaCapability_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'AntennaModule',
+ 'PK_AntennaModule_id',
+ 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "PK_AntennaModule_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'CloudNamespace',
+ 'PK_CloudNamespace_id',
+ 'ALTER TABLE ties_data."CloudNamespace" ADD CONSTRAINT "PK_CloudNamespace_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'CloudSite',
+ 'PK_CloudSite_id',
+ 'ALTER TABLE ties_data."CloudSite" ADD CONSTRAINT "PK_CloudSite_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'CloudifiedNF',
+ 'PK_CloudifiedNF_id',
+ 'ALTER TABLE ties_data."CloudifiedNF" ADD CONSTRAINT "PK_CloudifiedNF_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ENodeBFunction',
+ 'PK_ENodeBFunction_id',
+ 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "PK_ENodeBFunction_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'EUtranCell',
+ 'PK_EUtranCell_id',
+ 'ALTER TABLE ties_data."EUtranCell" ADD CONSTRAINT "PK_EUtranCell_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUCPFunction',
+ 'PK_GNBCUCPFunction_id',
+ 'ALTER TABLE ties_data."GNBCUCPFunction" ADD CONSTRAINT "PK_GNBCUCPFunction_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUUPFunction',
+ 'PK_GNBCUUPFunction_id',
+ 'ALTER TABLE ties_data."GNBCUUPFunction" ADD CONSTRAINT "PK_GNBCUUPFunction_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBDUFunction',
+ 'PK_GNBDUFunction_id',
+ 'ALTER TABLE ties_data."GNBDUFunction" ADD CONSTRAINT "PK_GNBDUFunction_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'PK_LTESectorCarrier_id',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "PK_LTESectorCarrier_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ManagedElement',
+ 'PK_ManagedElement_id',
+ 'ALTER TABLE ties_data."ManagedElement" ADD CONSTRAINT "PK_ManagedElement_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE',
+ 'PK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_id',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" ADD CONSTRAINT "PK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION',
+ 'PK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_id',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" ADD CONSTRAINT "PK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION',
+ 'PK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_id',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" ADD CONSTRAINT "PK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBDUFUNCTION',
+ 'PK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_id',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" ADD CONSTRAINT "PK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDeployment',
+ 'PK_NFDeployment_id',
+ 'ALTER TABLE ties_data."NFDeployment" ADD CONSTRAINT "PK_NFDeployment_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NODECLUSTER_LOCATED_AT_CLOUDSITE',
+ 'PK_NODECLUSTER_LOCATED_AT_CLOUDSITE_id',
+ 'ALTER TABLE ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" ADD CONSTRAINT "PK_NODECLUSTER_LOCATED_AT_CLOUDSITE_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellCU',
+ 'PK_NRCellCU_id',
+ 'ALTER TABLE ties_data."NRCellCU" ADD CONSTRAINT "PK_NRCellCU_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellDU',
+ 'PK_NRCellDU_id',
+ 'ALTER TABLE ties_data."NRCellDU" ADD CONSTRAINT "PK_NRCellDU_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'PK_NRSectorCarrier_id',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "PK_NRSectorCarrier_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NodeCluster',
+ 'PK_NodeCluster_id',
+ 'ALTER TABLE ties_data."NodeCluster" ADD CONSTRAINT "PK_NodeCluster_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'PhysicalNF',
+ 'PK_PhysicalNF_id',
+ 'ALTER TABLE ties_data."PhysicalNF" ADD CONSTRAINT "PK_PhysicalNF_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'Sector',
+ 'PK_Sector_id',
+ 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'Site',
+ 'PK_Site_id',
+ 'ALTER TABLE ties_data."Site" ADD CONSTRAINT "PK_Site_id" PRIMARY KEY ("id");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ANTENNAMODULE_SERVES_ANTENNACAPABILITY',
+ 'FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule',
+ 'ALTER TABLE ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."AntennaModule" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ANTENNAMODULE_SERVES_ANTENNACAPABILITY',
+ 'FK_AB3CEA707D389B107F1D10BC724542418E02ABEC',
+ 'ALTER TABLE ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_AB3CEA707D389B107F1D10BC724542418E02ABEC" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'AntennaModule',
+ 'FK_AntennaModule_REL_FK_grouped-by-sector',
+ 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "FK_AntennaModule_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'AntennaModule',
+ 'UNIQUE_AntennaModule_REL_ID_SECTOR_GROUPS_ANTENNAMODULE',
+ 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "UNIQUE_AntennaModule_REL_ID_SECTOR_GROUPS_ANTENNAMODULE" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'AntennaModule',
+ 'FK_AntennaModule_REL_FK_installed-at-site',
+ 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "FK_AntennaModule_REL_FK_installed-at-site" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES ties_data."Site" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'AntennaModule',
+ 'UNIQUE_AntennaModule_REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE',
+ 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "UNIQUE_AntennaModule_REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'CloudNamespace',
+ 'FK_CloudNamespace_REL_FK_deployed-on-nodeCluster',
+ 'ALTER TABLE ties_data."CloudNamespace" ADD CONSTRAINT "FK_CloudNamespace_REL_FK_deployed-on-nodeCluster" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES ties_data."NodeCluster" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'CloudNamespace',
+ 'UNIQUE_C72E1EF93E1AC8FA53D20808E775FF012ACB46F0',
+ 'ALTER TABLE ties_data."CloudNamespace" ADD CONSTRAINT "UNIQUE_C72E1EF93E1AC8FA53D20808E775FF012ACB46F0" UNIQUE ("REL_ID_CLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ENodeBFunction',
+ 'FK_ENodeBFunction_REL_FK_managed-by-managedElement',
+ 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "FK_ENodeBFunction_REL_FK_managed-by-managedElement" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."ManagedElement" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ENodeBFunction',
+ 'UNIQUE_F33037EE8037D0606D15FFB45EE8A27FD6DE30EE',
+ 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "UNIQUE_F33037EE8037D0606D15FFB45EE8A27FD6DE30EE" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ENODEBFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ENodeBFunction',
+ 'FK_ENodeBFunction_REL_FK_serving-physicalNF',
+ 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "FK_ENodeBFunction_REL_FK_serving-physicalNF" FOREIGN KEY ("REL_FK_serving-physicalNF") REFERENCES ties_data."PhysicalNF" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ENodeBFunction',
+ 'UNIQUE_ENodeBFunction_REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION',
+ 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "UNIQUE_ENodeBFunction_REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION" UNIQUE ("REL_ID_PHYSICALNF_SERVES_ENODEBFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'EUtranCell',
+ 'FK_EUtranCell_REL_FK_provided-by-enodebFunction',
+ 'ALTER TABLE ties_data."EUtranCell" ADD CONSTRAINT "FK_EUtranCell_REL_FK_provided-by-enodebFunction" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."ENodeBFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'EUtranCell',
+ 'UNIQUE_EUtranCell_REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL',
+ 'ALTER TABLE ties_data."EUtranCell" ADD CONSTRAINT "UNIQUE_EUtranCell_REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_EUTRANCELL");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'EUtranCell',
+ 'FK_EUtranCell_REL_FK_grouped-by-sector',
+ 'ALTER TABLE ties_data."EUtranCell" ADD CONSTRAINT "FK_EUtranCell_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'EUtranCell',
+ 'UNIQUE_EUtranCell_REL_ID_SECTOR_GROUPS_EUTRANCELL',
+ 'ALTER TABLE ties_data."EUtranCell" ADD CONSTRAINT "UNIQUE_EUtranCell_REL_ID_SECTOR_GROUPS_EUTRANCELL" UNIQUE ("REL_ID_SECTOR_GROUPS_EUTRANCELL");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUCPFunction',
+ 'FK_GNBCUCPFunction_REL_FK_managed-by-managedElement',
+ 'ALTER TABLE ties_data."GNBCUCPFunction" ADD CONSTRAINT "FK_GNBCUCPFunction_REL_FK_managed-by-managedElement" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."ManagedElement" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUCPFunction',
+ 'UNIQUE_249F73FF1F4316A56DEF4424FA43C2064FFBE4DD',
+ 'ALTER TABLE ties_data."GNBCUCPFunction" ADD CONSTRAINT "UNIQUE_249F73FF1F4316A56DEF4424FA43C2064FFBE4DD" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_GNBCUCPFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUCPFunction',
+ 'FK_GNBCUCPFunction_REL_FK_serving-physicalNF',
+ 'ALTER TABLE ties_data."GNBCUCPFunction" ADD CONSTRAINT "FK_GNBCUCPFunction_REL_FK_serving-physicalNF" FOREIGN KEY ("REL_FK_serving-physicalNF") REFERENCES ties_data."PhysicalNF" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUCPFunction',
+ 'UNIQUE_GNBCUCPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION',
+ 'ALTER TABLE ties_data."GNBCUCPFunction" ADD CONSTRAINT "UNIQUE_GNBCUCPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION" UNIQUE ("REL_ID_PHYSICALNF_SERVES_GNBCUCPFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUUPFunction',
+ 'FK_GNBCUUPFunction_REL_FK_managed-by-managedElement',
+ 'ALTER TABLE ties_data."GNBCUUPFunction" ADD CONSTRAINT "FK_GNBCUUPFunction_REL_FK_managed-by-managedElement" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."ManagedElement" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUUPFunction',
+ 'UNIQUE_BDB349CDF0C4055902881ECCB71F460AE1DD323E',
+ 'ALTER TABLE ties_data."GNBCUUPFunction" ADD CONSTRAINT "UNIQUE_BDB349CDF0C4055902881ECCB71F460AE1DD323E" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_GNBCUUPFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUUPFunction',
+ 'FK_GNBCUUPFunction_REL_FK_serving-physicalNF',
+ 'ALTER TABLE ties_data."GNBCUUPFunction" ADD CONSTRAINT "FK_GNBCUUPFunction_REL_FK_serving-physicalNF" FOREIGN KEY ("REL_FK_serving-physicalNF") REFERENCES ties_data."PhysicalNF" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBCUUPFunction',
+ 'UNIQUE_GNBCUUPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION',
+ 'ALTER TABLE ties_data."GNBCUUPFunction" ADD CONSTRAINT "UNIQUE_GNBCUUPFunction_REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION" UNIQUE ("REL_ID_PHYSICALNF_SERVES_GNBCUUPFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBDUFunction',
+ 'FK_GNBDUFunction_REL_FK_managed-by-managedElement',
+ 'ALTER TABLE ties_data."GNBDUFunction" ADD CONSTRAINT "FK_GNBDUFunction_REL_FK_managed-by-managedElement" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."ManagedElement" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBDUFunction',
+ 'UNIQUE_08DFEFAF56EDDE43CBDC336F459D28C6518D3E1D',
+ 'ALTER TABLE ties_data."GNBDUFunction" ADD CONSTRAINT "UNIQUE_08DFEFAF56EDDE43CBDC336F459D28C6518D3E1D" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_GNBDUFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBDUFunction',
+ 'FK_GNBDUFunction_REL_FK_serving-physicalNF',
+ 'ALTER TABLE ties_data."GNBDUFunction" ADD CONSTRAINT "FK_GNBDUFunction_REL_FK_serving-physicalNF" FOREIGN KEY ("REL_FK_serving-physicalNF") REFERENCES ties_data."PhysicalNF" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'GNBDUFunction',
+ 'UNIQUE_GNBDUFunction_REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION',
+ 'ALTER TABLE ties_data."GNBDUFunction" ADD CONSTRAINT "UNIQUE_GNBDUFunction_REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION" UNIQUE ("REL_ID_PHYSICALNF_SERVES_GNBDUFUNCTION");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."ENodeBFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'FK_LTESectorCarrier_REL_FK_used-antennaCapability',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "FK_LTESectorCarrier_REL_FK_used-antennaCapability" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'UNIQUE_5D5FEB6B4B09D5D42A589753C684994CD0B96E88',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "UNIQUE_5D5FEB6B4B09D5D42A589753C684994CD0B96E88" UNIQUE ("REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'FK_LTESectorCarrier_REL_FK_used-by-euTranCell',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "FK_LTESectorCarrier_REL_FK_used-by-euTranCell" FOREIGN KEY ("REL_FK_used-by-euTranCell") REFERENCES ties_data."EUtranCell" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'LTESectorCarrier',
+ 'UNIQUE_LTESectorCarrier_REL_ID_EUTRANCELL_USES_LTESECTORCARRIER',
+ 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "UNIQUE_LTESectorCarrier_REL_ID_EUTRANCELL_USES_LTESECTORCARRIER" UNIQUE ("REL_ID_EUTRANCELL_USES_LTESECTORCARRIER");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ManagedElement',
+ 'FK_ManagedElement_REL_FK_deployed-as-cloudifiedNF',
+ 'ALTER TABLE ties_data."ManagedElement" ADD CONSTRAINT "FK_ManagedElement_REL_FK_deployed-as-cloudifiedNF" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES ties_data."CloudifiedNF" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'ManagedElement',
+ 'UNIQUE_E7BC94037DB5B94B7E863A10BEA20C2D4C3C307C',
+ 'ALTER TABLE ties_data."ManagedElement" ADD CONSTRAINT "UNIQUE_E7BC94037DB5B94B7E863A10BEA20C2D4C3C307C" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE',
+ 'FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_aSide_NFDeployment',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" ADD CONSTRAINT "FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_aSide_NFDeployment" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."NFDeployment" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE',
+ 'FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_bSide_CloudNamespace',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE" ADD CONSTRAINT "FK_NFDEPLOYMENT_DEPLOYED_ON_CLOUDNAMESPACE_bSide_CloudNamespace" FOREIGN KEY ("bSide_CloudNamespace") REFERENCES ties_data."CloudNamespace" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION',
+ 'FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_aSide_NFDeployment',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" ADD CONSTRAINT "FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_aSide_NFDeployment" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."NFDeployment" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION',
+ 'FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_bSide_GNBCUCPFunction',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION" ADD CONSTRAINT "FK_NFDEPLOYMENT_SERVES_GNBCUCPFUNCTION_bSide_GNBCUCPFunction" FOREIGN KEY ("bSide_GNBCUCPFunction") REFERENCES ties_data."GNBCUCPFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION',
+ 'FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_aSide_NFDeployment',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" ADD CONSTRAINT "FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_aSide_NFDeployment" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."NFDeployment" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION',
+ 'FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_bSide_GNBCUUPFunction',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION" ADD CONSTRAINT "FK_NFDEPLOYMENT_SERVES_GNBCUUPFUNCTION_bSide_GNBCUUPFunction" FOREIGN KEY ("bSide_GNBCUUPFunction") REFERENCES ties_data."GNBCUUPFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBDUFUNCTION',
+ 'FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_aSide_NFDeployment',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" ADD CONSTRAINT "FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_aSide_NFDeployment" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."NFDeployment" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDEPLOYMENT_SERVES_GNBDUFUNCTION',
+ 'FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_bSide_GNBDUFunction',
+ 'ALTER TABLE ties_data."NFDEPLOYMENT_SERVES_GNBDUFUNCTION" ADD CONSTRAINT "FK_NFDEPLOYMENT_SERVES_GNBDUFUNCTION_bSide_GNBDUFunction" FOREIGN KEY ("bSide_GNBDUFunction") REFERENCES ties_data."GNBDUFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDeployment',
+ 'FK_NFDeployment_REL_FK_serviced-managedElement',
+ 'ALTER TABLE ties_data."NFDeployment" ADD CONSTRAINT "FK_NFDeployment_REL_FK_serviced-managedElement" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES ties_data."ManagedElement" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDeployment',
+ 'UNIQUE_NFDeployment_REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT',
+ 'ALTER TABLE ties_data."NFDeployment" ADD CONSTRAINT "UNIQUE_NFDeployment_REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDeployment',
+ 'FK_NFDeployment_REL_FK_comprised-by-cloudifiedNF',
+ 'ALTER TABLE ties_data."NFDeployment" ADD CONSTRAINT "FK_NFDeployment_REL_FK_comprised-by-cloudifiedNF" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES ties_data."CloudifiedNF" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NFDeployment',
+ 'UNIQUE_NFDeployment_REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT',
+ 'ALTER TABLE ties_data."NFDeployment" ADD CONSTRAINT "UNIQUE_NFDeployment_REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NODECLUSTER_LOCATED_AT_CLOUDSITE',
+ 'FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_aSide_NodeCluster',
+ 'ALTER TABLE ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" ADD CONSTRAINT "FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_aSide_NodeCluster" FOREIGN KEY ("aSide_NodeCluster") REFERENCES ties_data."NodeCluster" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NODECLUSTER_LOCATED_AT_CLOUDSITE',
+ 'FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_bSide_CloudSite',
+ 'ALTER TABLE ties_data."NODECLUSTER_LOCATED_AT_CLOUDSITE" ADD CONSTRAINT "FK_NODECLUSTER_LOCATED_AT_CLOUDSITE_bSide_CloudSite" FOREIGN KEY ("bSide_CloudSite") REFERENCES ties_data."CloudSite" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellCU',
+ 'FK_NRCellCU_REL_FK_provided-by-gnbcucpFunction',
+ 'ALTER TABLE ties_data."NRCellCU" ADD CONSTRAINT "FK_NRCellCU_REL_FK_provided-by-gnbcucpFunction" FOREIGN KEY ("REL_FK_provided-by-gnbcucpFunction") REFERENCES ties_data."GNBCUCPFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellCU',
+ 'UNIQUE_NRCellCU_REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU',
+ 'ALTER TABLE ties_data."NRCellCU" ADD CONSTRAINT "UNIQUE_NRCellCU_REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU" UNIQUE ("REL_ID_GNBCUCPFUNCTION_PROVIDES_NRCELLCU");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellDU',
+ 'FK_NRCellDU_REL_FK_grouped-by-sector',
+ 'ALTER TABLE ties_data."NRCellDU" ADD CONSTRAINT "FK_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellDU',
+ 'UNIQUE_NRCellDU_REL_ID_SECTOR_GROUPS_NRCELLDU',
+ 'ALTER TABLE ties_data."NRCellDU" ADD CONSTRAINT "UNIQUE_NRCellDU_REL_ID_SECTOR_GROUPS_NRCELLDU" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellDU',
+ 'FK_NRCellDU_REL_FK_provided-by-gnbduFunction',
+ 'ALTER TABLE ties_data."NRCellDU" ADD CONSTRAINT "FK_NRCellDU_REL_FK_provided-by-gnbduFunction" FOREIGN KEY ("REL_FK_provided-by-gnbduFunction") REFERENCES ties_data."GNBDUFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRCellDU',
+ 'UNIQUE_NRCellDU_REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU',
+ 'ALTER TABLE ties_data."NRCellDU" ADD CONSTRAINT "UNIQUE_NRCellDU_REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU" UNIQUE ("REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'FK_NRSectorCarrier_REL_FK_used-by-nrCellDu',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "FK_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES ties_data."NRCellDU" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'UNIQUE_NRSectorCarrier_REL_ID_NRCELLDU_USES_NRSECTORCARRIER',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "UNIQUE_NRSectorCarrier_REL_ID_NRCELLDU_USES_NRSECTORCARRIER" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'FK_NRSectorCarrier_REL_FK_provided-by-gnbduFunction',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "FK_NRSectorCarrier_REL_FK_provided-by-gnbduFunction" FOREIGN KEY ("REL_FK_provided-by-gnbduFunction") REFERENCES ties_data."GNBDUFunction" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'UNIQUE_872BE05F1989443F2595D99A77BC03733B2D1E2F',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "UNIQUE_872BE05F1989443F2595D99A77BC03733B2D1E2F" UNIQUE ("REL_ID_GNBDUFUNCTION_PROVIDES_NRSECTORCARRIER");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'FK_NRSectorCarrier_REL_FK_used-antennaCapability',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "FK_NRSectorCarrier_REL_FK_used-antennaCapability" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'NRSectorCarrier',
+ 'UNIQUE_EDF7D5C78EF6505848B1679B714D7831F5863991',
+ 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "UNIQUE_EDF7D5C78EF6505848B1679B714D7831F5863991" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'PhysicalNF',
+ 'FK_PhysicalNF_REL_FK_installed-at-site',
+ 'ALTER TABLE ties_data."PhysicalNF" ADD CONSTRAINT "FK_PhysicalNF_REL_FK_installed-at-site" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES ties_data."Site" (id) ON DELETE CASCADE;'
+);
+
+SELECT ties_data.create_constraint_if_not_exists(
+ 'PhysicalNF',
+ 'UNIQUE_PhysicalNF_REL_ID_PHYSICALNF_INSTALLED_AT_SITE',
+ 'ALTER TABLE ties_data."PhysicalNF" ADD CONSTRAINT "UNIQUE_PhysicalNF_REL_ID_PHYSICALNF_INSTALLED_AT_SITE" UNIQUE ("REL_ID_PHYSICALNF_INSTALLED_AT_SITE");'
+);
+
+
+
+
+
+
+COMMIT;
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ .Values.initsql.configmap.name }}
+ namespace: {{ include "common.namespace" . }}
+ labels: {{- include "common.labels" . | nindent 4 }}
+data:
+{{ tpl (.Files.Glob "resources/init_sql/*").AsConfig . | indent 2 }}
\ No newline at end of file
--- /dev/null
+# ============LICENSE_START===============================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ========================================================================
+# 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.
+# ============LICENSE_END=================================================
+#
+
+initsql:
+ configmap:
+ name: &sqlconfigmapname "topology-exposure-inventory-sql-init-config"
+
+postgresql:
+ image:
+ debug: true
+ auth:
+ enablePostgresUser: true
+ usePasswordFiles: true
+ postgresPassword: teiv
+ username: &dbusername topology_exposure_user
+ password: &dbpassword dbpassword
+ database: topology_exposure_db
+ volumePermissions:
+ enabled: true
+ primary:
+ initdb:
+ scriptsConfigMap: *sqlconfigmapname
+ user: postgres
+ password: teiv
+ persistence:
+ size: 1Gi
+ volumeName: pgsql-volume
+ storageClass: pgsql-sc
+
+kafka:
+ controller:
+ replicaCount: 1
+ persistence:
+ size: 1Gi
+ storageClass: kafka-sc
+ volumePermissions:
+ enabled: true
+ listeners:
+ client:
+ protocol: PLAINTEXT
+
+
+application: &applicationConfig
+ logging.level.root: ${ROOT_LOG_LEVEL:"INFO"}
+ logging.level.org.apache.kafka: ${KAFKA_LOG_LEVEL:"WARN"}
+
+ #Metrics related configurations
+ management:
+ endpoint:
+ metrics:
+ enabled: "true"
+ prometheus:
+ enabled: "true"
+ health:
+ probes:
+ enabled: "true"
+ show-details: "always"
+ show-components: "always"
+ validate-group-membership: "false"
+ group:
+ readiness:
+ include: "readinessState,${HEALTH_CHECK_INDICATOR:tiesExposure}"
+ endpoints:
+ web:
+ exposure:
+ include: "*"
+ prometheus:
+ metrics:
+ export:
+ enabled: "true"
+ metrics:
+ web:
+ server:
+ request:
+ autotime:
+ enabled: "true"
+
+ spring:
+ datasource:
+ read:
+ jdbc-url: ${SERVICE_DB_REPLICA_URL:jdbc:postgresql://oran-smo-postgresql:5432/topology_exposure_db}
+ username: ${SERVICE_DB_USER:topology_exposure_user}
+ password: ${SERVICE_DB_PASSWORD:dbpassword}
+ driver-class-name: org.postgresql.Driver
+ write:
+ jdbc-url: ${SERVICE_DB_URL:jdbc:postgresql://oran-smo-postgresql:5432/topology_exposure_db}
+ username: ${SERVICE_DB_USER:topology_exposure_user}
+ password: ${SERVICE_DB_PASSWORD:dbpassword}
+ driver-class-name: org.postgresql.Driver
+ main:
+ allow-circular-references: true
+ jooq:
+ sql-dialect: postgres
+ caching:
+ consumer-data-ttl-ms: 60000
+
+ endpoints.health.sensitive: "false"
+ info.app.name: '@name@'
+ info.app.description: Topology Exposure and Inventory Service
+ info.app.version: '@version@'
+ info.app.legal: 'Copyright (C) 2024 Ericsson
+ Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ 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.
+
+ SPDX-License-Identifier: Apache-2.0'
+
+ #See more details about pattern layout: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
+ #See more details about logging.pattern.level : https://docs.spring.io/spring-boot/docs/2.5.2/reference/html/features.html#features.logging.custom-log-configuration
+ #logging.pattern.level: "%5p [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}][%X{userName}]"
+ logging:
+ pattern:
+ dateformat: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
+ config: ${LOGBACK_CONFIG_FILE:classpath:logback-json.xml}
+ endpoints:
+ exclude: /actuator/health, /actuator/prometheus, /ping, /metrics, /actuator/id-(.*)
+
+ kafka:
+ server:
+ bootstrap-server-host: oran-smo-kafka.smo.svc.cluster.local
+ bootstrap-server-port: 9092
+ admin:
+ retry: 2147483647
+ retry-backoff-ms: 5000
+ reconnect-backoff-ms: 50
+ reconnect-backoff-max-ms: 30000
+ request-timeout-ms: 30000
+ availability:
+ retry-attempts: 2147483647
+ retry-interval-ms: 1000
+ topology-ingestion:
+ consumer:
+ topic:
+ name: topology-inventory-ingestion
+ partitions: 4
+ replicas: 1
+ retention-ms: 86400000
+ group-id: topology-inventory-ingestion-consumer
+ auto-offset-reset: earliest
+ max-poll-records: 500
+ max-poll-interval-ms: 300000
+ fetch-min-bytes: 1
+ fetch-max-wait-ms: 500
+ retry-attempts: 2147483647
+ retry-backoff-ms: 5000
+ concurrency: 2
+
+ database:
+ retry-policies:
+ deadlock:
+ retry-attempts: 10
+ retry-backoff-ms: 200
+
+ feature_flags:
+ use_alternate_delete_logic: false
+
+topology-exposure:
+ name: topology-exposure
+ namespace: default
+ imagePullPolicy: IfNotPresent
+ image:
+ registry: "nexus3.o-ran-sc.org:10002"
+ name: o-ran-sc/smo-teiv-exposure
+ tag: 0.0.1
+ service:
+ type: ClusterIP
+ ports:
+ - name: http
+ internalPort: "8080"
+ targetPort: "8080"
+ port: 8080
+ liveness:
+ initialDelaySeconds: 20
+ periodSeconds: 10
+ readiness:
+ initialDelaySeconds: 20
+ periodSeconds: 10
+ persistence:
+ size: 2Gi
+ storageClassName: standard
+ application: *applicationConfig
+
+
+topology-ingestion:
+ name: topology-ingestion
+ namespace: default
+ imagePullPolicy: IfNotPresent
+ image:
+ registry: "nexus3.o-ran-sc.org:10002"
+ name: o-ran-sc/smo-teiv-ingestion
+ tag: 0.0.1
+ service:
+ type: ClusterIP
+ ports:
+ - name: http
+ internalPort: "8080"
+ targetPort: "8080"
+ port: 8080
+ liveness:
+ initialDelaySeconds: 20
+ periodSeconds: 10
+ readiness:
+ initialDelaySeconds: 20
+ periodSeconds: 10
+ persistence:
+ size: 2Gi
+ storageClassName: standard
+ application: *applicationConfig
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END============================================
+#
+ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
+
+helm uninstall oran-smo -n smo
+kubectl delete namespace smo
+kubectl get pv | grep Released | awk '$1 {print$1}' | while read vol; do kubectl delete pv/${vol}; done
+
+# Cleanup ChartMuseum
+CM_PID_FILE="$ROOT_DIR/CM_PID.txt"
+if [ -f $CM_PID_FILE ]; then
+ echo "Cleaning up ChartMuseum..."
+ PID=$(cat "$CM_PID_FILE")
+ echo "Killing ChartMuseum with PID $PID"
+ kill $PID
+ rm $CM_PID_FILE
+ echo "ChartMuseum cleanup completed"
+fi
+
+rm -rf "$ROOT_DIR/chartstorage"
\ No newline at end of file