## -----------------------------------------------------------------------
## Copyright 2021-2023 Open Networking Foundation (ONF) and the ONF Contributors
##
## 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.
## -----------------------------------------------------------------------

kind-voltha
pyvoltha
voltha
voltha-adtran-adapter
voltha-api-server
voltha-bal
voltha-bbsim
voltha-docker-tools
voltha-docs
voltha-eponolt-adapter
voltha-epononu-adapter
voltha-go
voltha-go-controller
voltha-helm-charts
voltha-lib-go
voltha-northbound-bbf-adapter
voltha-omci
voltha-onos
voltha-openolt-adapter
voltha-openonu-adapter
voltha-openonu-adapter-go
voltha-ponsimolt-adapter
voltha-ponsimonu-adapter
VOLTHA-Projects
voltha-protos
voltha-python-base
voltha-simolt-adapter
voltha-simonu-adapter
voltha-system-tests
voltha-test-manifest

# [EOF]
