
<!--
Copyright 2017-present Open Networking Foundation

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.
-->


<div class = "left-nav">
<ul>
{% for admin in registered_admins %}
    <li><a href="{{ admin.url }}">{{ admin.name }}</a></li>
{% endfor %}
</ul>
</div>

<!--
<ul>
<li><a href="/admin/hpc/originserver/">Origin Servers</a></li>
<li><a href="/admin/hpc/contentprovider/">Content Providers</a></li>
<li><a href="/admin/hpc/serviceprovider/">Server Providers</a></li>
<li><a href="/admin/hpc/cdnprefix/">CDN Prefixes</a></li>
<li><a href="/admin/hpc/sitemap/">Site Maps</a></li>
<li><a href="/admin/hpc/accessmap/">Access Maps</a></li>
</ul>
-->
