<?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
  ~
  ~   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>
    <custom>
        <fluidoSkin>
            <topBarEnabled>true</topBarEnabled>
            <navBarStyle>navbar-inverse</navBarStyle>
            <sideBarEnabled>false</sideBarEnabled>
            <gitHub>
                <projectId>apache/streams-examples</projectId>
                <ribbonOrientation>right</ribbonOrientation>
                <ribbonColor>black</ribbonColor>
            </gitHub>
            <twitter>
                <user>ApacheStreams</user>
                <showUser>true</showUser>
                <showFollowers>true</showFollowers>
            </twitter>
        </fluidoSkin>
    </custom>
    <body>
        <menu name="Examples" inherit="top">
            <item name="Flink" href="streams-examples-flink/index.html"/>
            <item name="Local" href="streams-examples-local/index.html"/>
        </menu>
        <breadcrumbs>
            <item name="Streams" href="http://streams.apache.org/site/latest/streams-project"/>
            <item name="Examples" href="http://streams.apache.org/site/latest/streams-examples"/>
        </breadcrumbs>
        <head>
            <![CDATA[
            <script>
                (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','https://www.google-analytics.com/analytics.js','ga');

                ga('create', 'UA-77087101-1', 'auto');
                ga('send', 'pageview');
            </script>
            ]]>
        </head>
    </body>
</project>
