<!DOCTYPE html>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you 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.
  -->
<html lang="en">
  <head>
    <title>{% block title %}{{ headers.title }}{% endblock %}</title>

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <meta property="og:image" content="https://www.apache.org/images/asf_logo.gif" />

    <link rel="stylesheet" type="text/css" href="/css/site.css">

    {% if headers.atom %}
      <link rel="alternate" href="{{ headers.atom.url }}"
            type="application/atom+xml" title="{{ headers.atom.title }}" />
    {% endif %}

    {% if headers.base %}<base href="{{ headers.base }}" />{% endif %}
    {% if headers.notice %}<!-- {{ headers.notice }} -->{% endif %}
  </head>

  <body>
    <div id="page">
      <div id="header">
        {% if extralogo %}
        <div id="logo2"><img src="{{ extralogo }}"/></div>
        {% endif %}
        {% include "content/images/logo.svg" %}
      </div>
      <div id="breadcrumb">
        {{ breadcrumbs|safe }}
      </div>
      <div id="middle">
        <div id="leftnav">
          {% block navigation %}
          {% filter markdown %}{% include leftnav %}{% endfilter %}
          {% endblock %}
          <div id="bottom-nav">
            <img src="/images/pbv90x30.png"/>
            <div id="rss">
              <a class="poweredBy" href="/rss/news.rss" title="Velocity News Feed"><img class="poweredBy" alt="Velocity News Feed" src="/images/feed-icon-24x24.jpg"></a>
            </div>
            <iframe src="https://www.apache.org/ads/buttonbar.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="265"></iframe>
          </div>
        </div>
        {% block content %}<div id="content"><div class="section-content">{{ content|markdown }}</div></div>{% endblock %}
        <hr/>
        <div id="copyright">
          Copyright &#169; 2020 The Apache Software Foundation, Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
        </div>
      </div>
    </div>
  </body>
</html>
