
<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.
-->
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>Login to Apache Sling</title>
        <link href="/etc/clientlibs/launchpad/css/bundle.css" rel="stylesheet" />
    </head>
    <body>
        <div class="Grid Fit-Medium Home-Grid">
            <div class="Gradient"></div>
            <header class="Cell Medium-35 Large-25 Align-Center Logos">
                <a href="http://sling.apache.org" target="_blank" id="sling-logo" title="Visit the Apache Sling website">
                    <img src="/sling-logo.svg" alt="Apache Sling Logo"/>
                </a>
                <a href="http://apache.org" target="_blank" id="asf-logo" title="Visit the Apache Software Foundation website">
                    <img src="/etc/clientlibs/launchpad/img/asf-logo.svg" alt="Apache Software Foundation Logo"/>
                </a>
            </header>
            <div class="Cell Align-Center Main-Content">
                <div class="Grid">
                    <section class="Cell Large-100">
                    	<h3>Login:</h3>
						<form id="loginform" method="POST" action="${requestContextPath}/j_security_check" enctype="multipart/form-data" accept-charset="UTF-8">
							<input type="hidden" name="_charset_" value="UTF-8" />
							<input type="hidden" name="resource" value="${resource}" />
							<div id="error">
								<p>${j_reason}</p>
							</div>
							<div>
								<label for="j_username" >Username:</label>
							</div>
							<div>
								<input id="j_username" name="j_username" type="text" />
							</div>
							<div>
								<label for="j_password" accesskey="p">Password:</label>
							</div>
							<div>
								<input id="j_password" name="j_password" type="password" />
							</div>
							<div class="buttongroup">
								<button id="login" class="form-button" type="submit">Login</button>
							</div>
						</form>
                    </section>
                </div>
            </div>
        </div>
    </body>
</html>
