Add helm charts 11/13011/2
authoraravind.est <aravindhan.a@est.tech>
Mon, 24 Jun 2024 16:01:47 +0000 (17:01 +0100)
committeraravind.est <aravindhan.a@est.tech>
Wed, 26 Jun 2024 13:08:27 +0000 (14:08 +0100)
Helm charts adn scripts for installation added

Issue-ID: SMO-147
Change-Id: Id61195ac573a7f62f923a8865fe5694f5a5b8eb9
Signed-off-by: aravind.est <aravindhan.a@est.tech>
29 files changed:
charts/install-teiv.sh [new file with mode: 0644]
charts/smo/Chart.yaml [new file with mode: 0644]
charts/smo/Makefile [new file with mode: 0644]
charts/smo/smo-common/Chart.yaml [new file with mode: 0644]
charts/smo/smo-common/templates/_configmap.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_ingress.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_labels.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_name.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_namespace.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_pods.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_service.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_statefulset.tpl [new file with mode: 0644]
charts/smo/smo-common/templates/_utils.tpl [new file with mode: 0644]
charts/smo/smo/Chart.yaml [new file with mode: 0644]
charts/smo/smo/templates/kafka-pv.yaml [new file with mode: 0644]
charts/smo/smo/templates/pgsql-pv.yaml [new file with mode: 0644]
charts/smo/smo/values.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/Chart.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/.helmignore [new file with mode: 0644]
charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/Chart.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/configmap.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/deployment.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/service.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/values.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/resources/init_sql/00_init-teiv-exposure-model.sql [new file with mode: 0644]
charts/smo/topology-exposure-inventory/resources/init_sql/01_init-teiv-exposure-data.sql [new file with mode: 0644]
charts/smo/topology-exposure-inventory/templates/configmap.yaml [new file with mode: 0644]
charts/smo/topology-exposure-inventory/values.yaml [new file with mode: 0644]
charts/uninstall-teiv.sh [new file with mode: 0644]

diff --git a/charts/install-teiv.sh b/charts/install-teiv.sh
new file mode 100644 (file)
index 0000000..85ce4b8
--- /dev/null
@@ -0,0 +1,62 @@
+#!/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
diff --git a/charts/smo/Chart.yaml b/charts/smo/Chart.yaml
new file mode 100644 (file)
index 0000000..c88a3ef
--- /dev/null
@@ -0,0 +1,28 @@
+#  ============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
diff --git a/charts/smo/Makefile b/charts/smo/Makefile
new file mode 100644 (file)
index 0000000..7797fac
--- /dev/null
@@ -0,0 +1,125 @@
+# 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
+
+%:
+       @:
diff --git a/charts/smo/smo-common/Chart.yaml b/charts/smo/smo-common/Chart.yaml
new file mode 100644 (file)
index 0000000..18f8820
--- /dev/null
@@ -0,0 +1,20 @@
+################################################################################
+#   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
diff --git a/charts/smo/smo-common/templates/_configmap.tpl b/charts/smo/smo-common/templates/_configmap.tpl
new file mode 100644 (file)
index 0000000..fc18df2
--- /dev/null
@@ -0,0 +1,30 @@
+{{/*
+################################################################################
+#   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 -}}
diff --git a/charts/smo/smo-common/templates/_ingress.tpl b/charts/smo/smo-common/templates/_ingress.tpl
new file mode 100644 (file)
index 0000000..c5cf507
--- /dev/null
@@ -0,0 +1,36 @@
+{{/*
+################################################################################
+#   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 -}}
diff --git a/charts/smo/smo-common/templates/_labels.tpl b/charts/smo/smo-common/templates/_labels.tpl
new file mode 100644 (file)
index 0000000..1f97eff
--- /dev/null
@@ -0,0 +1,105 @@
+{{/*
+# 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 -}}
diff --git a/charts/smo/smo-common/templates/_name.tpl b/charts/smo/smo-common/templates/_name.tpl
new file mode 100644 (file)
index 0000000..d0072c2
--- /dev/null
@@ -0,0 +1,37 @@
+{{/*
+# 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 -}}
diff --git a/charts/smo/smo-common/templates/_namespace.tpl b/charts/smo/smo-common/templates/_namespace.tpl
new file mode 100644 (file)
index 0000000..94c9ee7
--- /dev/null
@@ -0,0 +1,26 @@
+{{/*
+# 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 -}}
diff --git a/charts/smo/smo-common/templates/_pods.tpl b/charts/smo/smo-common/templates/_pods.tpl
new file mode 100644 (file)
index 0000000..e81bc38
--- /dev/null
@@ -0,0 +1,92 @@
+{{/*
+################################################################################
+#   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 -}}
+
diff --git a/charts/smo/smo-common/templates/_service.tpl b/charts/smo/smo-common/templates/_service.tpl
new file mode 100644 (file)
index 0000000..5b81c1d
--- /dev/null
@@ -0,0 +1,137 @@
+{{/*
+# 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 -}}
diff --git a/charts/smo/smo-common/templates/_statefulset.tpl b/charts/smo/smo-common/templates/_statefulset.tpl
new file mode 100644 (file)
index 0000000..b0753ab
--- /dev/null
@@ -0,0 +1,32 @@
+{{/*
+################################################################################
+#   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 -}}
diff --git a/charts/smo/smo-common/templates/_utils.tpl b/charts/smo/smo-common/templates/_utils.tpl
new file mode 100644 (file)
index 0000000..b74ecbd
--- /dev/null
@@ -0,0 +1,28 @@
+{{/*
+# 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 -}}
diff --git a/charts/smo/smo/Chart.yaml b/charts/smo/smo/Chart.yaml
new file mode 100644 (file)
index 0000000..c88a3ef
--- /dev/null
@@ -0,0 +1,28 @@
+#  ============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
diff --git a/charts/smo/smo/templates/kafka-pv.yaml b/charts/smo/smo/templates/kafka-pv.yaml
new file mode 100644 (file)
index 0000000..ea144bf
--- /dev/null
@@ -0,0 +1,63 @@
+#  ============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
diff --git a/charts/smo/smo/templates/pgsql-pv.yaml b/charts/smo/smo/templates/pgsql-pv.yaml
new file mode 100644 (file)
index 0000000..601f30b
--- /dev/null
@@ -0,0 +1,31 @@
+#  ============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
diff --git a/charts/smo/smo/values.yaml b/charts/smo/smo/values.yaml
new file mode 100644 (file)
index 0000000..b4884fd
--- /dev/null
@@ -0,0 +1,26 @@
+#  ============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
diff --git a/charts/smo/topology-exposure-inventory/Chart.yaml b/charts/smo/topology-exposure-inventory/Chart.yaml
new file mode 100644 (file)
index 0000000..cdbfbd8
--- /dev/null
@@ -0,0 +1,43 @@
+#  ============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
diff --git a/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/.helmignore b/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/.helmignore
new file mode 100644 (file)
index 0000000..50af031
--- /dev/null
@@ -0,0 +1,22 @@
+# 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/
diff --git a/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/Chart.yaml b/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/Chart.yaml
new file mode 100644 (file)
index 0000000..4f0aca7
--- /dev/null
@@ -0,0 +1,22 @@
+#  ============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
diff --git a/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/configmap.yaml b/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/configmap.yaml
new file mode 100644 (file)
index 0000000..3b61b84
--- /dev/null
@@ -0,0 +1,18 @@
+#  ============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" . }}
diff --git a/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/deployment.yaml b/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/deployment.yaml
new file mode 100644 (file)
index 0000000..a8c1966
--- /dev/null
@@ -0,0 +1,41 @@
+#  ============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 }}
diff --git a/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/service.yaml b/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/templates/service.yaml
new file mode 100644 (file)
index 0000000..581f669
--- /dev/null
@@ -0,0 +1,18 @@
+#  ============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" . }}
diff --git a/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/values.yaml b/charts/smo/topology-exposure-inventory/charts/topology-exposure-inventory/values.yaml
new file mode 100644 (file)
index 0000000..fea5882
--- /dev/null
@@ -0,0 +1,162 @@
+#  ============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
diff --git a/charts/smo/topology-exposure-inventory/resources/init_sql/00_init-teiv-exposure-model.sql b/charts/smo/topology-exposure-inventory/resources/init_sql/00_init-teiv-exposure-model.sql
new file mode 100644 (file)
index 0000000..ad443da
--- /dev/null
@@ -0,0 +1,460 @@
+--
+--  ============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;
diff --git a/charts/smo/topology-exposure-inventory/resources/init_sql/01_init-teiv-exposure-data.sql b/charts/smo/topology-exposure-inventory/resources/init_sql/01_init-teiv-exposure-data.sql
new file mode 100644 (file)
index 0000000..554c48e
--- /dev/null
@@ -0,0 +1,1320 @@
+--
+--  ============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;
diff --git a/charts/smo/topology-exposure-inventory/templates/configmap.yaml b/charts/smo/topology-exposure-inventory/templates/configmap.yaml
new file mode 100644 (file)
index 0000000..40bc95e
--- /dev/null
@@ -0,0 +1,24 @@
+#  ============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
diff --git a/charts/smo/topology-exposure-inventory/values.yaml b/charts/smo/topology-exposure-inventory/values.yaml
new file mode 100644 (file)
index 0000000..506c1de
--- /dev/null
@@ -0,0 +1,231 @@
+#  ============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
diff --git a/charts/uninstall-teiv.sh b/charts/uninstall-teiv.sh
new file mode 100644 (file)
index 0000000..eb05221
--- /dev/null
@@ -0,0 +1,35 @@
+#!/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