<?xml version="1.0" encoding="UTF-8"?>

<!--
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.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">

  <body>
    <breadcrumbs>
      <item name="Maven" href="https://maven.apache.org/pom/maven/index.html" />
      <item name="Skins" href="https://maven.apache.org/pom/maven/maven-skins/index.html" />
    </breadcrumbs>

    <menu name="Maven Parent POMs">
      <item name="Maven" href="../index.html"/>
      <item name="Plugins" href="../maven-plugins/index.html"/>
      <item name="Extensions" href="../maven-extensions/index.html"/>
      <item name="Shared Components" href="../maven-shared-components/index.html"/>
      <item name="Skins" href="../maven-skins/index.html"/>
      <item name="Doxia Tools" href="../doxia-tools/index.html"/>
    </menu>

    <menu ref="parent" />
  </body>
</project>