<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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 name="MRQL">
  <bannerLeft>
    <name>Apache MRQL</name>
    <href>http://mrql.incubator.apache.org/</href>
  </bannerLeft>
  <bannerRight>
    <src>http://incubator.apache.org/images/egg-logo.png</src>
    <href>http://incubator.apache.org/</href>
  </bannerRight>

  <publishDate position="right"/>
  <version position="right"/>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.0</version>
  </skin>

  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
    </fluidoSkin>
  </custom>

  <body>
    <head>
      <script type="text/javascript">

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-62083383-2', 'auto');
  ga('send', 'pageview');

      </script>
    </head>

    <links position="left">
      <item name="Wiki" href="http://wiki.apache.org/mrql/" />
      <item name="JIRA" href="https://issues.apache.org/jira/browse/MRQL" />
      <item name="GIT" href="https://git-wip-us.apache.org/repos/asf?p=incubator-mrql.git" />
    </links>

   <breadcrumbs position="left">
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Apache Incubator" href="http://incubator.apache.org/" />
    </breadcrumbs>

    <menu name="Information">
      <item name="Overview" href="index.html"/>
      <item name="Who We Are" href="team-list.html" />
    </menu>

    <menu name="Resources">
      <item name="Developers" href="developers.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
    </menu>

    <menu name="Documentation">
      <item name="Getting Started" href="getting_started.html" />
      <item name="Research Papers and Presentations" href="http://wiki.apache.org/mrql/Publications" />
    </menu>

    <menu name="Related Projects">
      <item name="Hadoop" href="http://hadoop.apache.org/" />
      <item name="Hama" href="http://hama.apache.org/" />
      <item name="Spark" href="http://spark.apache.org/" />
      <item name="Flink" href="http://flink.apache.org/" />
    </menu>

    <menu name="ASF">
      <item name="How Apache Works" href="http://www.apache.org/foundation/how-it-works.html"/>
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>

  </body>
</project>
