<!DOCTYPE html>
## 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.
#parse( "site-macros.vm" )
#set ( $skipGenerationDate = 'true' == $decoration.getCustomValue( 'fluidoSkin.skipGenerationDate' ) )
<!--
 | Generated by Apache Maven Doxia Site Renderer#if( $doxiaSiteRendererVersion ) $doxiaSiteRendererVersion#end##
#if( $docRenderingContext && ( $docRenderingContext.generator || $docRenderingContext.doxiaSource ) ) from##
#**##if( $docRenderingContext.generator ) $docRenderingContext.generator#end##
#**##if( $docRenderingContext.doxiaSource ) $docRenderingContext.doxiaSourcePath#end##
#end
#if ( !$skipGenerationDate ) at $dateFormat.format( $currentDate )#end

 | Rendered using Apache Maven Fluido Skin @project.version@
-->
##
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
  <head>
    <meta charset="${outputEncoding}" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
## put meta together
#foreach( $author in $authors )
    <meta name="author" content="$author" />
#end
#if ( $dateCreation )
    <meta name="Date-Creation-yyyymmdd" content="$dateCreation" />
#end
#if ( $dateRevision && !$skipGenerationDate )
    <meta name="Date-Revision-yyyymmdd" content="$dateRevision" />
#end
#if ( $locale )
    <meta http-equiv="Content-Language" content="$locale.language" />
#end
    <title>$title</title>
    <link rel="stylesheet" href="$relativePath/css/apache-maven-fluido-@project.version@.min.css" />
    <link rel="stylesheet" href="$relativePath/css/site.css" />
    <link rel="stylesheet" href="$relativePath/css/print.css" media="print" />
#**##prjProfile()
    <script type="text/javascript" src="$relativePath/js/apache-maven-fluido-@project.version@.min.js"></script>
#**##if( $decoration.body.head )
#*  *#$render.eval( $decoration.body.head )
#**##end
#**##if( $headContent )$headContent#end
#**##googleAnalytics( $decoration.googleAnalyticsAccountId )
#**##flattrHead()
  </head>
#**##set ( $topBarEnabled = 'true' == $decoration.getCustomValue( 'fluidoSkin.topBarEnabled' ) )
#**##if ( $topBarEnabled )
  <body class="topBarEnabled">
#**##else
  <body class="topBarDisabled">
#**##end
#**##forkMeOnGitHub()
##
#**##set ( $sideBarEnabled = 'false' != $decoration.getCustomValue( 'fluidoSkin.sideBarEnabled' ) )
#**##set ( $searchEnabled = $decoration.getCustomChild( 'fluidoSkin.googleSearch' )
             && ( $decoration.getCustomValue( 'fluidoSkin.googleSearch.sitesearch' ) || $project.url ) )
##
#**##if ( $topBarEnabled )
#*  *##set ( $navBarStyle = $decoration.getCustomValue( 'fluidoSkin.navBarStyle', '' ) )
    <div id="topbar" class="navbar navbar-fixed-top $navBarStyle">
      <div class="navbar-inner">
#*    *##if ( $sideBarEnabled )
        <div class="container-fluid">
        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </a>
#*    *##else
#*      *##if ( $decoration.getCustomValue( 'fluidoSkin.topBarContainerStyle' ) )
            <div class="container" style="$decoration.getCustomValue( 'fluidoSkin.topBarContainerStyle' )"><div class="nav-collapse">
#*      *##else
            <div class="container"><div class="nav-collapse">
#*      *##end
#*    *##end
#*    *##if ( $decoration.getCustomChild( 'fluidoSkin.topBarIcon' ) )
#*      *##set ( $topBarIcon = $decoration.getCustomChild( 'fluidoSkin.topBarIcon' ) )
##
#*      *##if ( $topBarIcon.getChild( 'href' ) )
#*        *##set ( $hrf = $topBarIcon.getChild( 'href' ).getValue() )
#*        *##if ( !$decoration.isLink( $hrf ) )
#*          *##set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) )
#*          *##set ( $hrf = $hrf.replaceAll( '\\', '/' ) )
#*          *##if ( ( $hrf == '' ) )
#*            *##set ( $hrf = './' )
#*          *##end
#*        *##end
#*        *#<a class="brand" href="$hrf" #if( $topBarIcon.getChild( 'alt' ) ) title="$topBarIcon.getChild( 'alt' ).getValue()"#end>##
##
#*        *##set ( $topBarIconName = $decoration.getCustomValue( 'fluidoSkin.topBarIcon.name', $project.name ) )
##
#*        *##if( $topBarIcon.getChild( 'src' ) )
#*          *##set ( $src = $topBarIcon.getChild( 'src' ).getValue() )
#*          *##if ( !$decoration.isLink( $src ) )
#*            *##set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
#*            *##set ( $src = $src.replaceAll( '\\', '/' ) )
#*          *##end
#*          *##set ( $alt = $decoration.getCustomValue( 'fluidoSkin.topBarIcon.alt', $topBarIconName ) )
#*          *#<img src="$src" alt="$alt" />
#*        *##else
#*          *#$topBarIconName
#*        *##end
##
#*        *#</a>
#*      *##end
#*    *##end
##
##      ## MSKINS-31
#*      *##if( $decoration.body && $decoration.body.menus )
            <ul class="nav">
#*          *##topMenu( $decoration.body.menus )
            </ul>
#*      *##end
##
#*      *##if ( $searchEnabled && !$sideBarEnabled )
#*        *##googleSearch(true)
#*      *##end
##
#*      *##if ( !$sideBarEnabled )
#*        *##facebookLike( $sideBarEnabled )
#*        *##followTwitter( $sideBarEnabled )
#*        *##flattrBody( $sideBarEnabled )
#*      *##end
##
##        ## MSKINS-31
#*      *##if( $decoration.body
              && $decoration.body.links
              && $decoration.body.links.size() > 0 )
            <ul class="nav pull-right">
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
                <ul class="dropdown-menu">
#*            *##topLinks( $decoration.body.links )
                </ul>
              </li>
            </ul>
#*      *##end
##
#*      *##if ($topBarEnabled)
            </div>
#*      *##end
##
        </div>
      </div>
    </div>
#**##end
##
#**##if ( $sideBarEnabled )
    <div class="container-fluid">
#**##else
    <div class="container">
#**##end
      <div id="banner">
        <div class="pull-left">##
#*      *##if( $decoration.bannerLeft )
#*        *##banner( $decoration.bannerLeft "bannerLeft" )
#*      *##else
#*      *### MSKINS-32
          <h1>##
#*        *##if( $project.name && $project.name != '' )
#*          *#$project.name
#*        *##else
#*          *#$project.artifactId
#*        *##end
#*      *#</h1>##
#*      *##end
#*    *#</div>
        <div class="pull-right">#banner( $decoration.bannerRight "bannerRight" )</div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
#*      *##publishDate( "left" $decoration.publishDate $decoration.version )
#*      *##publishDate( "right" $decoration.publishDate $decoration.version )
##
#*      *### MSITE-44
#*      *##if ( !$topBarEnabled
              && $decoration.body.links
              && $decoration.body.links.size() > 0 )
#*        *##links( $decoration.body.links )
#*      *##end
        </ul>
      </div>
##
#*    *##if ( $sideBarEnabled )
#*      *##set ( $leftColumnClass = $decoration.getCustomValue( 'fluidoSkin.leftColumnClass', 'span2' ) )
##
      <div class="row-fluid">
        <div id="leftColumn" class="$leftColumnClass">
          <div class="well sidebar-nav">
#*      *##publishDate( "navigation-top" $decoration.publishDate $decoration.version )
#*      *##mainMenu( $decoration.body.menus )
#*      *##publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
#*      *##if ( $searchEnabled )
#*        *##googleSearch( false )
#*      *##end
          <hr />
          <div id="poweredBy">
#*        *##facebookLike( $sideBarEnabled )
            <div class="clear"></div>
#*        *##followTwitter( $sideBarEnabled )
            <div class="clear"></div>
#*        *##flattrBody( $sideBarEnabled )
            <div class="clear"></div>
#*        *##builtByLogo( $decoration.poweredBy )
            </div>
          </div>
        </div>
#*    *##end
##
#*    *##set ( $bodyColumnClass = $decoration.getCustomValue( 'fluidoSkin.bodyColumnClass', 'span10' ) )
##
        <div id="bodyColumn" #if ( $sideBarEnabled ) class="$bodyColumnClass" #end>
#*      *##if ( $title && $title.endsWith( "Project License" ) )
#*        *#$bodyContent
#*      *##else
#*        *##if ( 'true' == $decoration.getCustomValue( 'fluidoSkin.sourceLineNumbersEnabled' ) )
#*          *##set ( $sourceStyle = "prettyprint linenums" )
#*        *##else
#*          *##set ( $sourceStyle = "prettyprint" )
#*        *##end
##
#*        *#$bodyContent.replaceAll( "<div class=${esc.q}source${esc.q}>(\r?\n)?<pre>", "<div class=${esc.q}source${esc.q}><pre class=${esc.q}$sourceStyle${esc.q}>" ).replaceAll( "class=${esc.q}bodyTable${esc.q}", "class=${esc.q}table table-striped${esc.q}" )
#*      *##end
        </div>
#*    *##if ( $sideBarEnabled )
      </div>
#*    *##end
    </div>
    <hr/>
    <footer>
#*  *##if ( $sideBarEnabled )
      <div class="container-fluid">
#*  *##else
      <div class="container">
#*  *##end
#*    *##if ( $sideBarEnabled )
        <div class="row-fluid">
#*    *##else
        <div class="row">
#*    *##end
#*    *##if ( $decoration.body.footer )
#*      *#$render.eval( $decoration.body.footer )
#*    *##else
#*      *##if ( $decoration.getCustomChild( 'fluidoSkin.copyrightClass' ) )
#*        *##set ( $copyrightClass = ' class="' + $decoration.getCustomValue( 'fluidoSkin.copyrightClass' ) + '"' )
#*      *##end
            <p$!copyrightClass>Copyright &copy;#copyright()All rights reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )</p>
#*    *##end
        </div>
##
#*    *##if ( !$sideBarEnabled )
        <p id="poweredBy" class="pull-right">##
#*      *##builtByLogo( $decoration.poweredBy )
#*    *#</p>
#*    *##end
##
#*    *##ohloh()
      </div>
    </footer>
#**##piwik()
  </body>
</html>
