<?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.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator">

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

    <custom>
        <fluidoSkin>
            <ohloh>
                <projectId>apache-curator</projectId>
                <widget>factoids</widget>
            </ohloh>
            <facebookLike />
            <googlePlusOne />
            <twitter>
                <user>ApacheCurator</user>
                <showUser>false</showUser>
                <showFollowers>false</showFollowers>
            </twitter>
        </fluidoSkin>
    </custom>

    <bannerLeft>
        <name>Apache Curator</name>
        <src>/images/curator-logo.png</src>
        <href>/index.html</href>
    </bannerLeft>

    <bannerRight>
        <name>Apache</name>
        <src>http://apache.org/images/feather-small.gif</src>
        <href>http://apache.org</href>
    </bannerRight>

    <publishDate/>

    <version position="none"/>

    <body>
        <links>
            <item name="Apache ZooKeeper" href="http://zookeeper.apache.org"/>
        </links>

        <menu name="Apache Curator" inherit="top">
            <item name="About" href="index.html"/>
            <item name="Getting Started" href="getting-started.html"/>
            <item name="Examples" href="curator-examples/index.html"/>
            <item name="Recipes" href="curator-recipes/index.html"/>
            <item name="Framework" href="curator-framework/index.html"/>
            <item name="Utilities" href="utilities.html"/>
            <item name="Client" href="curator-client/index.html"/>
        </menu>

        <menu name="Details" inherit="top">
            <item name="Error Handling" href="errors.html"/>
            <item name="Logging and Tracing" href="logging.html"/>
            <item name="Tech Notes" href="https://cwiki.apache.org/confluence/display/CURATOR/Tech+Notes"/>
            <item name="Exhibitor Integration" href="exhibitor.html"/>
            <item name="Source Code" href="source-repository.html"/>
            <item name="Project Team" href="team-list.html"/>
            <item name="Project Information" href="project-info.html"/>
            <item name="API Compatibility" href="compatibility.html"/>
            <item name="Javadoc" href="apidocs/index.html"/>
            <item name="Wiki" href="https://cwiki.apache.org/confluence/display/CURATOR"/>
            <item name="Releases" href="https://cwiki.apache.org/confluence/display/CURATOR/Releases"/>
        </menu>

        <menu name="Extensions" inherit="top">
            <item name="Service Discovery" href="curator-x-discovery/index.html"/>
            <item name="Service Discovery Server" href="curator-x-discovery-server/index.html"/>
            <item name="Curator RPC Proxy" href="curator-x-rpc/index.html"/>
        </menu>

        <menu name="Community" inherit="top">
            <item name="Submitting Pull Requests" href="https://cwiki.apache.org/confluence/display/CURATOR/Submitting+Pull+Requests"/>
            <item name="History" href="https://cwiki.apache.org/confluence/display/CURATOR/Curator's+History"/>
            <item name="Third Party Articles" href="https://cwiki.apache.org/confluence/display/CURATOR/Third+Party+Articles"/>
            <item name="Third Party Contributions" href="https://cwiki.apache.org/confluence/display/CURATOR/Contributions+to+Curator"/>
            <item name="For Committers" href="https://cwiki.apache.org/confluence/display/CURATOR/For+Curator+Committers"/>
        </menu>

        <menu name="ASF" inherit="bottom">
            <item name="How the ASF works" href="http://www.apache.org/foundation/how-it-works.html"/>
            <item name="Get Involved" href="http://www.apache.org/foundation/getinvolved.html"/>
            <item name="Developer Resources" href="http://www.apache.org/dev/"/>
            <item name="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html"/>
            <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
        </menu>

        <footer>
            <div class="row span12" style="margin-bottom: 8px;">
                Apache Curator, the Apache feather logo, and the Apache Curator project logos are
                trademarks of The Apache Software Foundation. All other marks mentioned may be
                trademarks or registered trademarks of their respective owners.
            </div>
        </footer>
    </body>
</project>
