<!--
 * 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.
-->
<header class="clearfix">
    <ul class="nav navbar-nav">
        <li>
            <a href="javascript:void(0);" data-id="menuHamburger"><i class="fa fa-bars"></i></a>
        </li>
        <li class="details-backbutton"><a href="javascript:void(0);" data-id="backButton"><i class="fa fa-chevron-left"></i> Back To Results</a></li>
    </ul>
    <div class="btn-group pull-right header-menu ">
        <a class="show-stat" href="javascript:void(0);" title="Statistics"><i class="fa fa-bar-chart"></i></a>
        <a target="_blank" href="http://atlas.apache.org/"><i class="fa  fa-question-circle"></i></a>
        <a href="javascript:void(0);" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="user-dropdown"><i class="fa fa-user user-circle "></i><span class="userName"></span></a>
        <ul class="dropdown-menu">
            <li class="aboutAtlas"><a href="javascript:void(0)">About</a></li>
            <li role="separator" class="divider"></li>
            <li>
                <a href="logout.html"><i class="fa fa-sign-out"></i>Logout</a>
            </li>
        </ul>
    </div>
</header>