<?xml version="1.0" ?>
<!--
  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.
-->
<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
         name="Apache Rat&trade;">
  <bannerLeft>
    <title>The Apache Software Foundation</title>
    <name>The Apache Software Foundation</name>
    <src>https://www.apache.org/img/asf_logo.png</src>
    <href>https://www.apache.org/</href>
  </bannerLeft>
  <poweredBy>
      <logo name="Maven"
            href="https://maven.apache.org/"
            img="https://maven.apache.org/images/logos/maven-feather.png"/>

  </poweredBy>

  <body>
    <head>
      <link
            href='https://fonts.googleapis.com/css?family=Mate+SC'
            rel='stylesheet'
            type='text/css'/>
    </head>

    <breadcrumbs>
      <item name="Apache" href="https://www.apache.org/"/>
      <item name="Creadur" href="https://creadur.apache.org/"/>
      <item name="Rat" href="https://creadur.apache.org/rat/"/>
    </breadcrumbs>

    <menu name="Apache Rat&#8482;" inherit="bottom">
      <item name="Introducing Rat" href="/index.html"/>
      <item name="Javadocs" href="/apidocs/index.html"/>
      <item name="Downloads" href="/download_rat.cgi"/>
      <item name="Changes" href="/RELEASE_NOTES.txt"/>
    </menu>

    <menu name="Running Rat" inherit="bottom">
      <item name="From The Command Line" href="apache-rat/index.html"/>
      <item name="With Ant" href="apache-rat-tasks/index.html"/>
      <item name="With Maven" href="apache-rat-plugin/index.html"/>
    </menu>

    <menu name="Apache Creadur&#8482;" inherit="bottom">
      <item name='Creadur Project Home' href="https://creadur.apache.org"/>
      <item name='Apache Tentacles' href="https://creadur.apache.org/tentacles"/>
      <item name='Apache Whisker' href="https://creadur.apache.org/whisker"/>
      <item name='Security' href='https://www.apache.org/security/'/>
      <item name='License' href='https://www.apache.org/licenses/'/>
      <item name='Sponsorship' href='https://www.apache.org/foundation/sponsorship.html'/>
      <item name='Thanks' href='https://www.apache.org/foundation/thanks.html'/>
    </menu>

    <menu name="The Apache Software Foundation" inherit="bottom">
        <item name='About the Foundation'
            href="https://www.apache.org/foundation"/>
        <item name='The projects'
            href="https://projects.apache.org"/>
        <item name='The people'
            href="https://people.apache.org"/>
        <item name='How we work'
            href='https://www.apache.org/foundation/how-it-works.html'/>
        <item name='Our history'
            href='https://www.apache.org/foundation/how-it-works.html#history'/>
        <item name='News'
            href='https://blogs.apache.org/foundation/'/>
    </menu>

    <menu name="Contribute" inherit="bottom">
      <item name="Get Involved" href='https://www.apache.org/foundation/getinvolved.html'/>
    </menu>

    <menu name="Committer Info" inherit="bottom">
      <item name="ASF Committers' FAQ" href='https://www.apache.org/dev/committers.html'/>
      <item name='New Committers Guide' href='https://www.apache.org/dev/new-committers-guide.html'/>
      <item name="Howto publish this site" href="site-publish.html"/>
      <item name='Plant Apache' href='https://planet.apache.org/committers/'/>
      <item name='Community' href='https://community.apache.org/'/>
      <item name='Legal' href='https://www.apache.org/legal/'/>
      <item name='Branding' href='https://www.apache.org/foundation/marks/'/>
      <item name='Media Relations' href='https://www.apache.org/press/'/>
    </menu>

    <menu ref="modules"/>
    <menu ref="reports"/>

    <footer>Copyright &copy; 2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
      Apache Creadur, Creadur, Apache Rat, Apache Tentacles, Apache Whisker, Apache and the Apache feather logo are trademarks
      of The Apache Software Foundation.
      Oracle and Java are registered trademarks of Oracle and/or its affiliates.
      All other marks mentioned may be trademarks or registered trademarks of their respective owners.</footer>
  </body>
</project>
