Remove old UI, option to use it, and its build processes

This commit is contained in:
Freddy 2019-04-12 09:02:27 -06:00 committed by GitHub
parent eab6ecefe8
commit 73f8286099
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
81 changed files with 399 additions and 9481 deletions

6
.gitignore vendored
View File

@ -12,12 +12,6 @@ Thumbs.db
bin/
changelog.tmp
exit-code
ui/.bundle
ui/.sass-cache
ui/dist/
ui/static/application.min.js
ui/static/base.css
ui/vendor
website/.bundle
website/build/
website/npm-debug.log

View File

@ -43,7 +43,6 @@ endif
CONSUL_DEV_IMAGE?=consul-dev
GO_BUILD_TAG?=consul-build-go
UI_BUILD_TAG?=consul-build-ui
UI_LEGACY_BUILD_TAG?=consul-build-ui-legacy
BUILD_CONTAINER_NAME?=consul-builder
DIST_TAG?=1
@ -88,7 +87,6 @@ NOGOX?=1
export NOGOX
export GO_BUILD_TAG
export UI_BUILD_TAG
export UI_LEGACY_BUILD_TAG
export BUILD_CONTAINER_NAME
export GIT_COMMIT
export GIT_DIRTY
@ -223,7 +221,7 @@ static-assets:
# Build the static web ui and build static assets inside a Docker container
ui: ui-legacy-docker ui-docker static-assets-docker
ui: ui-docker static-assets-docker
tools:
go get -u -v $(GOTOOLS)
@ -239,7 +237,7 @@ version:
@$(SHELL) $(CURDIR)/build-support/scripts/version.sh -r -g
docker-images: go-build-image ui-build-image ui-legacy-build-image
docker-images: go-build-image ui-build-image
go-build-image:
@echo "Building Golang build container"
@ -249,10 +247,6 @@ ui-build-image:
@echo "Building UI build container"
@docker build $(NOCACHE) $(QUIET) -t $(UI_BUILD_TAG) - < build-support/docker/Build-UI.dockerfile
ui-legacy-build-image:
@echo "Building Legacy UI build container"
@docker build $(NOCACHE) $(QUIET) -t $(UI_LEGACY_BUILD_TAG) - < build-support/docker/Build-UI-Legacy.dockerfile
static-assets-docker: go-build-image
@$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh static-assets
@ -262,12 +256,9 @@ consul-docker: go-build-image
ui-docker: ui-build-image
@$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh ui
ui-legacy-docker: ui-legacy-build-image
@$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh ui-legacy
proto:
protoc agent/connect/ca/plugin/*.proto --gofast_out=plugins=grpc:../../..
.PHONY: all ci bin dev dist cov test test-ci test-internal test-install-deps cover format vet ui static-assets tools
.PHONY: docker-images go-build-image ui-build-image ui-legacy-build-image static-assets-docker consul-docker ui-docker
.PHONY: ui-legacy-docker version proto
.PHONY: docker-images go-build-image ui-build-image static-assets-docker consul-docker ui-docker
.PHONY: version proto

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,6 @@ import (
"net/http"
"net/http/pprof"
"net/url"
"os"
"reflect"
"regexp"
"strconv"
@ -218,10 +217,6 @@ func (s *HTTPServer) handler(enableDebug bool) http.Handler {
handlePProf("/debug/pprof/trace", pprof.Trace)
if s.IsUIEnabled() {
legacy_ui, err := strconv.ParseBool(os.Getenv("CONSUL_UI_LEGACY"))
if err != nil {
legacy_ui = false
}
var uifs http.FileSystem
// Use the custom UI dir if provided.
@ -229,18 +224,9 @@ func (s *HTTPServer) handler(enableDebug bool) http.Handler {
uifs = http.Dir(s.agent.config.UIDir)
} else {
fs := assetFS()
if legacy_ui {
fs.Prefix += "/v1/"
} else {
fs.Prefix += "/v2/"
}
uifs = fs
}
if !legacy_ui {
uifs = &redirectFS{fs: uifs}
}
uifs = &redirectFS{fs: uifs}
mux.Handle("/robots.txt", http.FileServer(uifs))
mux.Handle("/ui/", http.StripPrefix("/ui/", http.FileServer(uifs)))

View File

@ -1,16 +0,0 @@
FROM ubuntu:bionic
RUN mkdir -p /consul-src/ui
RUN apt-get update -y && \
apt-get install --no-install-recommends -y -q \
build-essential \
git \
ruby \
ruby-dev \
zip \
zlib1g-dev && \
gem install bundler -v '1.17.3'
WORKDIR /consul-src/ui
CMD make dist

View File

@ -3,7 +3,6 @@ HASHICORP_GPG_KEY="348FFC4C"
# Default Image Names
UI_BUILD_CONTAINER_DEFAULT="consul-build-ui"
UI_LEGACY_BUILD_CONTAINER_DEFAULT="consul-build-ui-legacy"
GO_BUILD_CONTAINER_DEFAULT="consul-build-go"
# Whether to colorize shell output

View File

@ -113,62 +113,15 @@ function build_ui {
# Copy UI over ready to be packaged into the binary
if test ${ret} -eq 0
then
rm -rf ${1}/pkg/web_ui/v2
rm -rf ${1}/pkg/web_ui
mkdir -p ${1}/pkg/web_ui
cp -r ${1}/ui-v2/dist ${1}/pkg/web_ui/v2
cp -r ${1}/ui-v2/dist/ ${1}/pkg/web_ui
fi
popd > /dev/null
return $ret
}
function build_ui_legacy {
# Arguments:
# $1 - Path to the top level Consul source
# $2 - The docker image to run the build within (optional)
#
# Returns:
# 0 - success
# * - error
if ! test -d "$1"
then
err "ERROR: '$1' is not a directory. build_ui_legacy must be called with the path to the top level source as the first argument'"
return 1
fi
local sdir="$1"
local ui_legacy_dir="${sdir}/ui"
local image_name=${UI_LEGACY_BUILD_CONTAINER_DEFAULT}
if test -n "$2"
then
image_name="$2"
fi
pushd ${ui_legacy_dir} > /dev/null
status "Creating the Legacy UI Build Container with image: ${image_name}"
rm -r ${sdir}/pkg/web_ui/v1 >/dev/null 2>&1
mkdir -p ${sdir}/pkg/web_ui/v1
local container_id=$(docker create -it ${image_name})
local ret=$?
if test $ret -eq 0
then
status "Copying the source from '${ui_legacy_dir}' to /consul-src/ui within the container"
(
docker cp . ${container_id}:/consul-src/ui &&
status "Running build in container" &&
docker start -i ${container_id} &&
status "Copying back artifacts" &&
docker cp ${container_id}:/consul-src/pkg/web_ui/v1/. ${sdir}/pkg/web_ui/v1
)
ret=$?
docker rm ${container_id} > /dev/null
fi
popd > /dev/null
return $ret
}
function build_assetfs {
# Arguments:
# $1 - Path to the top level Consul source

View File

@ -457,14 +457,6 @@ function build_release {
return 1
fi
status_stage "==> Building Legacy UI for version ${vers}"
build_ui_legacy "${sdir}" "${UI_LEGACY_BUILD_TAG}"
if test $? -ne 0
then
err "ERROR: Failed to build the legacy ui"
return 1
fi
status_stage "==> Building UI for version ${vers}"
# passing the version to override the version determined via tags
build_ui "${sdir}" "${UI_BUILD_TAG}" "${vers}"
@ -473,7 +465,7 @@ function build_release {
err "ERROR: Failed to build the ui"
return 1
fi
status "UI Built with Version: $(ui_version "${sdir}/pkg/web_ui/v2/index.html")"
status "UI Built with Version: $(ui_version "${sdir}/pkg/web_ui/index.html")"
status_stage "==> Building Static Assets for version ${vers}"
build_assetfs "${sdir}" "${GO_BUILD_TAG}"

View File

@ -14,7 +14,7 @@ source "${SCRIPT_DIR}/functions.sh"
function usage {
cat <<-EOF
Usage: ${SCRIPT_NAME} (consul|ui|ui-legacy|static-assets) [<options ...>]
Usage: ${SCRIPT_NAME} (consul|ui|static-assets) [<options ...>]
Description:
This script will build the various Consul components within docker containers
@ -81,7 +81,7 @@ function main {
refresh=1
shift
;;
consul | ui | ui-legacy | static-assets )
consul | ui | static-assets )
command="$1"
shift
;;
@ -128,17 +128,7 @@ function main {
fi
status_stage "==> Building UI"
build_ui "${sdir}" "${image}" || return 1
status "==> UI Built with Version: $(ui_version ${sdir}/pkg/web_ui/v2/index.html), Logo: $(ui_logo_type ${sdir}/pkg/web_ui/v2/index.html)"
;;
ui-legacy )
if is_set "${refresh}"
then
status_stage "==> Refreshing Legacy UI build container image"
export UI_LEGACY_BUILD_TAG="${image:-${UI_LEGACY_BUILD_CONTAINER_DEFAULT}}"
refresh_docker_images "${sdir}" ui-legacy-build-image || return 1
fi
status_stage "==> Building UI"
build_ui_legacy "${sdir}" "${image}" || return 1
status "==> UI Built with Version: $(ui_version ${sdir}/pkg/web_ui/index.html), Logo: $(ui_logo_type ${sdir}/pkg/web_ui/index.html)"
;;
* )
err_usage "ERROR: Unknown command: '${command}'"

View File

@ -1,12 +0,0 @@
ROOT:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
server:
python -m SimpleHTTPServer
watch:
sass styles:static --watch
dist:
@sh -c "'$(ROOT)/scripts/dist.sh'"
.PHONY: server watch dist

View File

@ -1,7 +0,0 @@
# A sample Gemfile
source "https://rubygems.org"
gem "ffi", "~> 1.9.24"
gem "uglifier"
gem "sass"
gem "therubyracer"

View File

@ -1,32 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
execjs (2.7.0)
ffi (1.9.25)
libv8 (3.16.14.19)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
ref (2.0.0)
sass (3.5.6)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
therubyracer (0.12.3)
libv8 (~> 3.16.14.15)
ref
uglifier (4.1.9)
execjs (>= 0.3.0, < 3)
PLATFORMS
ruby
DEPENDENCIES
ffi (~> 1.9.24)
sass
therubyracer
uglifier
BUNDLED WITH
1.16.1

View File

@ -1,80 +0,0 @@
## Consul Web UI
This directory contains the Consul Web UI. Consul contains a built-in
HTTP server that serves this directory, but any common HTTP server
is capable of serving it.
It uses JavaScript and [Ember](http://emberjs.com) to communicate with
the [Consul API](https://www.consul.io/api/index.html). The basic
features it provides are:
- Service view. A list of your registered services, their
health and the nodes they run on.
- Node view. A list of your registered nodes, the services running
on each and the health of the node.
- Key/value view and update
It's aware of multiple datacenters, so you can get a quick global
overview before drilling into specific data-centers for detailed
views.
The UI uses some internal undocumented HTTP APIs to optimize
performance and usability.
### Development
Improvements and bug fixes are welcome and encouraged for the Web UI.
You'll need sass to compile CSS stylesheets. Install that with
bundler:
cd ui/
bundle
Reloading compilation for development:
make watch
Consul ships with an HTTP server for the API and UI. By default, when
you run the agent, it is off. However, if you pass a `-ui-dir` flag
with a path to this directory, you'll be able to access the UI via the
Consul HTTP server address, which defaults to `localhost:8500/ui`.
An example of this command, from inside the `ui/` directory, would be:
consul agent -bootstrap -server -data-dir /tmp/ -ui-dir .
Basic tests can be run by adding the `?test` query parameter to the
application.
When developing Consul, it's recommended that you use the included
development configuration.
consul agent -config-file=development_config.json
### Releasing
`make dist`
The `../pkg/web_ui` folder will contain the files you should use for deployment.
### Acknowledgments
Cog icon by useiconic.com from the [Noun Project](https://thenounproject.com/term/setting/45865/)
### Compiling the UI into the Go binary
The UI is compiled and shipped with the Consul go binary. The generated bindata
file lives in the `command/agent/bindata_assetfs.go` file and is checked into
source control. This is useful so that not every Consul developer needs to set
up bundler etc. To re-generate the file, first follow the compilation steps
above to build the UI assets into the `pkg/web_ui` folder. With that done, from the
root of the Consul repo, run:
```
$ make static-assets
```
The file will now be refreshed with the current UI data. You can now rebuild the
Consul binary normally with `make bin` or `make dev`, and see the updated UI
after re-launching Consul.

View File

@ -1,803 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=0.7, user-scalable=no">
<title>Consul by HashiCorp</title>
<link rel="stylesheet" href="static/bootstrap.min.css">
<link rel="stylesheet" href="static/base.css">
<link rel="icon" type="image/png" href="static/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="static/favicon-16x16.png" sizes="16x16">
<script type="text/javascript">
// Change this value to your consul host if you are not running
// the UI on the same host as a consul instance.
// e.g. "http://myserver.com:8500"
var consulHost = ''
</script>
</head>
<body>
<noscript>
<center>
<h2>JavaScript Required</h2>
<p>Please enable JavaScript in your web browser to use Consul UI.</p>
</center>
</noscript>
<div class="wrapper">
<div class="container">
<div class="col-md-12">
<div id="app">
</div>
</div>
</div>
<div class="push"></div>
</div>
<div class="footer">
<div class="container">
<div class="col-md-12">
</div>
</div>
</div>
<script type="text/x-handlebars">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="error">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<div class="text-center vertical-center">
{{#if controller.model.statusText }}
<p class="bold">HTTP error code from Consul: <code>{{controller.model.status}} {{controller.model.statusText}}</code></p>
{{/if}}
{{#if controller.model.responseText }}
<p class="bold">Error message from Consul: <code>{{limit controller.model.responseText 255}}</code></p>
{{/if}}
<p>Consul returned an error. You may have visited a URL that is loading an unknown resource, so you
can try going back to the root. If your ACL token was not found you can reset it, and then you
will be redirected to the settings page to enter a new ACL token.</p>
<div class="form-group">
<button {{ action "resetToken" }} {{ bind-attr class=":btn :btn-danger" }}>Reset ACL Token</button>
<button {{ action "backHome" }} {{ bind-attr class=":btn :btn-default" }}>Go Back to Root</button>
</div>
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="dc/unauthorized">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<div class="text-center vertical-center">
<p class="bold">Access Denied</p>
<p>Your ACL token does not have the appropriate permissions to perform the expected action.</p>
<p>Learn more in the <a href="https://www.consul.io/docs/guides/acl.html" target="_blank">ACL documentation</a>.</p>
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="dc/aclsdisabled">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<div class="text-center vertical-center">
<p class="bold">ACLs Disabled</p>
<p>ACLs are disabled in this Consul cluster. This is the default behavior, as you have to explicitly enable them.</p>
<p>Learn more in the <a href="https://www.consul.io/docs/guides/acl.html" target="_blank">ACL documentation</a>.</p>
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="loading">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<div class="text-center vertical-center">
<img src="static/loading-cylon-pink.svg" width="384" height="48">
<p><small>Loading...</small></p>
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" id="actionbar">
<div class="row">
<div class="action-bar">
<div {{ bind-attr class="searchBar:col-md-10:col-md-5" }} >
<div class="form-group">
{{ input type="text" value=filter class="form-control form-control-mini" placeholder=filterText}}
</div>
</div>
{{#if newAclButton }}
<div class="col-md-2">
<div class="form-group">
{{#link-to 'acls' class='btn btn-mini btn-default btn-noactive pull-right'}}New ACL{{/link-to}}
</div>
</div>
{{/if}}
{{#if statuses}}
<div class="col-md-5">
<div class="form-group">
{{view Ember.Select content=statuses value=status class="form-control form-control-mini"}}
</div>
</div>
{{/if}}
{{#if hasExpanded }}
<div class="col-md-2 hidden-xs hidden-sm">
<div class="form-group">
<button {{ bind-attr class=":btn :btn-mini :pull-right condensed:btn-default:btn-primary" }} {{action toggleCondensed }}>Expand</button>
</div>
</div>
{{/if}}
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="dc">
<div class="row">
<div {{ bind-attr class=":col-md-12 :col-sm-12 :col-xs-12 :topbar" }}>
<div class="col-md-1 col-sm-2 col-xs-8 col-sm-offset-0 col-xs-offset-1">
<a href="#"><div class="top-brand"></div></a>
</div>
<div class="col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1">
{{#link-to 'services' class='btn btn-default col-xs-12'}}Services{{/link-to}}
</div>
<div class="col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1">
{{#link-to 'nodes' class='btn btn-default col-xs-12'}}Nodes{{/link-to}}
</div>
<div class="col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1">
{{#link-to 'kv' class='btn btn-default col-xs-12'}}Key/Value{{/link-to}}
</div>
<div class="col-md-2 col-sm-2 col-xs-8 col-md-offset-0 col-sm-offset-2 col-xs-offset-1">
{{#link-to 'acls' class='btn btn-default col-xs-12'}}ACL{{/link-to}}
</div>
<div class="col-md-2 col-sm-2 col-xs-6 col-md-offset-0 col-sm-offset-4 col-xs-offset-1">
<a {{bind-attr class=":col-xs-12 :btn hasFailingChecks:btn-warning:btn-success"}} {{action "toggle"}}> <span class="elip-overflow">{{model}} <span class="caret"></span></span> </a>
{{#if isDropdownVisible}}
<ul class="dropdown-menu col-xs-8" style="display:block;">
{{#each dc in dcs}}
<li {{action "hideDrop"}}>{{#link-to 'services' dc}}{{dc}}{{/link-to}}</li>
{{/each}}
</ul>
{{/if}}
</div>
<div class="col-md-1 col-sm-2 col-xs-2 col-md-offset-0 col-sm-offset-0 col-xs-offset-0">
{{#link-to 'settings' class='btn btn-default col-xs-6 icon'}}
<svg xmlns="http://www.w3.org/2000/svg" data-icon="cog" viewBox="0 0 32 40">
<path d="M14 0l-1.313 4c-1 .3-1.975.688-2.875 1.188l-3.72-1.875-2.78 2.78 1.875 3.72c-.5.9-.888 1.875-1.188 2.875L0 14v4l4 1.314c.3 1 .687 1.975 1.187 2.875l-1.78 3.718 2.78 2.78 3.72-1.874c.9.5 1.905.887 2.905 1.188l1.28 4h4l1.314-4c1-.3 2.006-.688 2.906-1.188L26 28.594l2.813-2.78-1.906-3.72c.5-.9.887-1.905 1.188-2.905L32 18v-4l-4-1.312c-.3-1-.687-1.975-1.187-2.875l1.78-3.72-2.78-2.78-3.72 1.875c-.9-.5-1.905-.888-2.905-1.188L18 0h-4zm2 9c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7z"/>
</svg>
{{/link-to}}
</div>
</div>
</div>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="kv/show">
<div class="row">
<div class="col-md-6 col-lg-5 padded-right-middle">
<h4 class="breadcrumbs"><a href="" {{action 'linkToKey' grandParentKey }}>{{parentKey}}</a> <a href="" {{action 'linkToKey' parentKey }}>+</a></h4>
</div>
</div>
<div class="row">
<div class="col-md-6 col-lg-5 padded-right-middle">
{{#each item in model }}
{{#link-to item.linkToRoute item.Key tagName="div" href=false class="list-group-item list-condensed-link" }}
<div {{bind-attr class="item.isFolder:bg-gray:bg-light-gray :list-bar-horizontal"}}></div>
<div class="name">
{{item.keyWithoutParent}}
</div>
{{/link-to}}
{{/each}}
</div>
<div class="border-left hidden-xs hidden-sm">
</div>
<div class="visible-xs visible-sm">
<hr>
</div>
<div class="col-md-6 col-lg-7 border-left">
<div class="padded-border">
<div class="panel">
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-light-gray" }}></div>
<div class="panel-heading">
<h4 class="panel-title">
Create Key
</h4>
</div>
<div class="panel-body panel-form">
<form class="form">
<div class="form-group">
<p>{{errorMessage}}</p>
</div>
<div {{ bind-attr class=":form-group newKey.keyValid:valid" }}>
<div class="input-group">
<span class="input-group-addon">{{parentKey}}</span>
{{ input value=newKey.Key class="form-control" required=true }}
</div>
<span class="help-block">To create a folder, end the key with <code>/</code></span>
</div>
{{#if newKey.isFolder }}
<p>No value needed for nested keys.</p>
{{else}}
<div {{ bind-attr class=":form-group newKey.validateJson:validate newKey.isValidJson:success:error" }}>
{{ textarea value=newKey.Value class="form-control"}}
<span class="help-block">Value can be any format and length</span>
</div>
{{/if}}
<button {{ action "createKey"}} {{bind-attr disabled=newKey.isInvalid }} {{ bind-attr class=":btn newKey.isValid:btn-success:btn-default" }}>Create</button>
{{#unless newKey.isFolder }}
<label class="form-checkbox">{{ input type=checkbox checked=newKey.validateJson }}Validate JSON</label>
{{/unless}}
<button {{ action "deleteFolder"}} {{ bind-attr class=":btn :pull-right isLoading:btn-warning:btn-danger isRoot:hidden" }}>Delete folder</button>
</form>
</div>
</div>
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="kv/edit">
<div class="row">
<div class="col-md-6 col-lg-5 padded-right-middle">
<h4 class="breadcrumbs"><a href="" {{action 'linkToKey' grandParentKey }}>{{parentKey}}</a> <a href="" {{action 'linkToKey' parentKey }}>+</a></h4>
</div>
</div>
<div class="row">
<div class="col-md-6 col-lg-5 padded-right-middle">
{{#each item in siblings }}
{{#link-to item.linkToRoute item.Key tagName="div" href=false class="list-group-item list-condensed-link" }}
<div {{bind-attr class="item.isFolder:bg-gray:bg-light-gray :list-bar-horizontal"}}></div>
<div class="name">
{{item.keyWithoutParent}}
</div>
{{/link-to}}
{{/each}}
</div>
<div class="border-left hidden-xs hidden-sm">
</div>
<div class="visible-xs visible-sm">
<hr>
</div>
<div class="col-md-6 col-lg-7 border-left sticky-scroll">
<div class="padded-border">
<div class="panel">
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-green isLocked:bg-light-gray" }}></div>
<div class="panel-heading">
<h4 {{bind-attr class=":panel-title isLocked:locked"}}>
{{model.Key}}
{{#if model.isLocked}}
<small class="pull-right">
KEY LOCKED
</small>
{{/if}}
</h4>
</div>
<div class="panel-body panel-form">
<div class="form-group">
{{errorMessage}}
</div>
<form class="form">
<div {{ bind-attr class=":form-group model.validateJson:validate model.isValidJson:success:error" }}>
{{ textarea value=model.valueDecoded class="form-control" disabled=model.isLocked}}
</div>
<button {{action "updateKey"}} {{bind-attr disabled=isLoading}} {{bind-attr class=":btn isLoading:btn-warning:btn-success"}} {{bind-attr disabled=isLocked}}>Update</button>
<button {{action "cancelEdit"}} {{bind-attr disabled=isLoading}} {{bind-attr class=":btn isLoading:btn-warning:btn-default"}}>Cancel</button>
<label class="form-checkbox">{{ input type=checkbox checked=model.validateJson }}Validate JSON</label>
<button {{action "deleteKey"}} {{bind-attr disabled=isLoading}} {{bind-attr class=":btn :pull-right isLoading:btn-warning:btn-danger"}} {{bind-attr disabled=isLocked}}>Delete key</button>
</form>
</div>
</div>
{{#if model.isLocked}}
<h5>Lock Session</h5>
{{#link-to 'nodes.show' model.session.Node tagName="div" href=false class="list-group-item list-condensed-link" }}
<div class="bg-light-gray list-bar-horizontal"></div>
<div class="name">
{{ sessionName session }}
<small class="pull-right">
{{session.Node}}
</small>
</div>
{{/link-to}}
{{/if}}
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="item/loading">
<div class="row">
<div class="col-md-8 col-md-offset-2 col-sm-12 col-xs-12">
<div class="text-center vertical-center">
<img src="static/loading-cylon-pink.svg" width="384" height="48">
<p><small>Loading...</small></p>
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" id="services">
<div class="row">
<div {{ bind-attr class=":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" }}>
{{view App.ActionBarView }}
{{#if filteredContent}}
{{#if condensed }}
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
{{#link-to 'services.show' Name tagName="div" href=false class="list-group-item list-condensed-link" }}
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar-horizontal"}}></div>
<div class="name">
{{Name}}
<small class="pull-right">
{{ checkMessage }}
</small>
</div>
{{/link-to}}
{{/collection}}
{{else}}
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
{{#link-to 'services.show' Name tagName="div" href=false class="list-group-item list-link" }}
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar"}}></div>
<h4 class="list-group-item-heading">
{{#link-to 'services.show' Name class='subtle'}}{{Name}}{{/link-to}}
<div class="heading-helper">
<a class="subtle" href="#">{{checkMessage}}</a>
</div>
</h4>
<ul class="list-inline">
{{#each node in nodes }}
<li class="bold">{{node}}</li>
{{/each}}
</ul>
{{/link-to}}
{{/collection}}
{{/if}}
{{else}}
<p class="light">There are no services to show.</p>
{{/if}}
</div>
<div class="border-left hidden-xs hidden-sm">
</div>
<div class="visible-xs visible-sm">
<hr>
</div>
<div class="col-md-6 col-lg-7 border-left scrollable">
<div class="row padded-border">
{{outlet}}
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" id="service">
<div class="col-xs-12 col-sm-12 visible-xs visible-sm">
{{#link-to "services" class="btn btn-default btn-block" }}Back to all services{{/link-to}}
<hr>
</div>
<h3 class="no-margin">{{ model.0.Service.Service }}</h3>
<hr>
<h5>Tags</h5>
{{#if tags}}
<p>{{tags}}</p>
{{else}}
<p>No tags</p>
{{/if}}
<h5>Nodes</h5>
{{#each node in model }}
{{#link-to 'nodes.show' node.Node.Node tagName="div" href=false class="panel panel-link panel-list" }}
<div {{bind-attr class="node.hasFailingChecks:bg-orange:bg-green :panel-bar-horizontal"}}></div>
<div class="panel-heading">
<h3 class="panel-title">
{{node.Node.Node}}
<small>{{node.Node.Address}}</small>
<span class="panel-note">{{node.checkMessage}}</span>
</h3>
</div>
<ul class="list-unstyled">
{{#each check in node.Checks }}
<li class="list-group-item list-condensed-link">
{{listBar check.Status}}
<div class="name">
{{check.Name}}
<small>{{ check.CheckID }}</small>
<small class="pull-right">
{{check.Status}}
</small>
</div>
</li>
{{/each}}
</ul>
{{/link-to}}
{{/each}}
</script>
<script type="text/x-handlebars" id="nodes">
<div class="row">
<div {{ bind-attr class=":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" }}>
{{view App.ActionBarView }}
{{#if filteredContent}}
{{#if condensed }}
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
{{#link-to 'nodes.show' Node tagName="div" href=false class="list-group-item list-condensed-link" }}
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar-horizontal"}}></div>
<div class="name">
{{Node}}
<small class="pull-right">
{{ numServices }} services
</small>
</div>
{{/link-to}}
{{/collection}}
{{else}}
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
{{#link-to 'nodes.show' Node tagName="div" href=false class="list-group-item list-link" }}
<div {{bind-attr class="hasFailingChecks:bg-orange:bg-green :list-bar"}}></div>
<h4 class="list-group-item-heading">
{{Node}}
<small>{{Address}}</small>
<div class="heading-helper">
<a class="subtle" href="#">{{checkMessage}}</a>
</div>
</h4>
<ul class="list-inline">
{{#each service in services}}
<li class="bold">{{service.Service}}</li>
{{/each}}
</ul>
{{/link-to}}
{{/collection}}
{{/if}}
{{else}}
<p class="light">There are no nodes to show.</p>
{{/if}}
</div>
<div class="border-left hidden-xs hidden-sm">
</div>
<div class="col-md-6 col-lg-7 border-left scrollable">
<div class="row padded-border">
{{outlet}}
</div>
</div>
</div>
</script>
<script type="text/x-handlebars" id="node">
<div class="col-xs-12 col-sm-12 visible-xs visible-sm">
{{#link-to "nodes" class="btn btn-default btn-block" }}Back to all nodes{{/link-to}}
<hr>
</div>
<h3 class="no-margin">
{{ model.Node }} <small> {{ model.Address }}</small>
</h3>
<hr>
<h5>Services</h5>
{{#each service in model.Services }}
{{#link-to 'services.show' service.Service tagName="div" href=false class="list-group-item list-condensed-link double-line" }}
<div class="list-bar-horizontal bg-light-gray"></div>
<div class="name">
{{service.Service}}
<small class="pull-right">
{{service.Address}}:{{service.Port}}
</small>
</div>
<ul class="list-inline sub">
{{#each tag in service.Tags}}
<li>{{tag}}</li>
{{/each}}
{{serviceTagMessage service.Tags}}
</ul>
{{/link-to}}
{{/each}}
<h5>Checks</h5>
{{#each check in model.Checks }}
<div class="panel">
{{ panelBar check.Status }}
<div class="panel-heading">
<h3 class="panel-title">
{{check.Name}}
<small>{{check.CheckID}}</small>
<span class="panel-note">{{check.Status}}</span>
</h3>
</div>
<div class="panel-body">
<h5>Notes</h5>
<p>{{ check.Notes }}</p>
<h5>Output</h5>
<pre>{{check.Output}}</pre>
</div>
</div>
{{/each}}
<h5>Lock Sessions</h5>
{{#if sessions }}
{{errorMessage}}
{{#each session in sessions }}
<div class="list-group-item list-condensed double-line">
<div class="bg-light-gray list-bar-horizontal"></div>
<div class="name">
{{ sessionName session }}
<button {{ action "invalidateSession" session.ID }} {{ bind-attr class=":btn :btn-danger :pull-right :btn-list isLoading:btn-warning" }}>Invalidate</button>
</div>
<ul class="list-inline sub">
{{#each check in session.Checks}}
<li class="bold">{{check}}</li>
{{/each}}
</ul>
{{ sessionMeta session }}
</div>
{{/each}}
{{else}}
<p class="light small">No sessions</p>
{{/if}}
<h5>Network Tomography</h5>
{{ tomographyGraph tomography 336 }}
<p class="light small">Node: <span id="tomography-node-info"></span></p>
<p class="light small">Minimum: {{ tomography.min }}ms</p>
<p class="light small">Median: {{ tomography.median }}ms</p>
<p class="light small">Maximum: {{ tomography.max }}ms</p>
</script>
<script type="text/x-handlebars" id="acls">
<div class="row">
<div {{ bind-attr class=":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" }}>
{{view App.ActionBarView }}
{{#if filteredContent}}
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
{{#link-to 'acls.show' ID tagName="div" href=false class="list-group-item list-condensed-link" }}
<div class="bg-light-gray list-bar-horizontal"></div>
<div class="name">
{{ aclName Name ID }}
</div>
{{/link-to}}
{{/collection}}
{{else}}
<p class="light">There are no ACLs to show.</p>
{{/if}}
</div>
<div class="border-left hidden-xs hidden-sm">
</div>
{{#if isShowingItem}}
<div class="col-md-6 col-lg-7 border-left scrollable">
<div class="row padded-border">
{{outlet}}
</div>
</div>
{{else}}
<div class="col-md-6 col-lg-7 border-left">
<div class="row padded-border">
<div class="panel">
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-light-gray" }}></div>
<div class="panel-heading">
<h4 class="panel-title">
New ACL
</h4>
</div>
<div class="panel-body panel-form">
<div class="form-group"></div>
<form class="form">
<div class="form-group">
{{ input value=newAcl.Name class="form-control" }}
<span class="help-block">Set the optional name for the ACL.</span>
</div>
<div class="form-group">
{{view Ember.Select content=types value=newAcl.Type class="form-control form-control-mini"}}
<span class="help-block">The type of ACL this is.</span>
</div>
<div class="form-group">
<label>Rules</label>
{{ textarea value=newAcl.Rules class="form-control" }}
<span class="help-block">For more information on rules, visit the <a href="https://www.consul.io/docs/guides/acl.html" target="_blank">ACL documentation.</a></span>
</div>
<button {{ action "createAcl"}} {{ bind-attr class=":btn :btn-success" }}>Create</button>
</form>
</div>
</div>
</div>
</div>
{{/if}}
</div>
</script>
<script type="text/x-handlebars" id="acl">
<div class="row">
<div class="col-xs-12 col-sm-12 visible-xs visible-sm">
{{#link-to "acls" class="btn btn-default btn-block" }}Back to all ACLs{{/link-to}}
<hr>
</div>
</div>
<div class="panel">
<div {{ bind-attr class=":panel-bar isLoading:bg-orange:bg-light-gray" }}></div>
<div class="panel-heading">
<h4 class="panel-title">
{{ aclName "Update ACL" model.ID }}
</h4>
</div>
<div class="panel-body panel-form">
<div class="form-group"></div>
<form class="form">
<div class="form-group">
{{ input value=model.Name class="form-control" }}
<span class="help-block">Set the optional name for the ACL.</span>
</div>
<div class="form-group">
{{view Ember.Select content=types value=model.Type class="form-control form-control-mini"}}
<span class="help-block">The type of ACL this is.</span>
</div>
<div class="form-group">
<label>Rules</label>
{{ textarea value=model.Rules class="form-control" }}
<span class="help-block">For more information on rules, visit the <a href="https://www.consul.io/docs/guides/acl.html" target="_blank">ACL documentation.</a></span>
</div>
<button {{ action "updateAcl"}} {{ bind-attr class=":btn :btn-success" }}>Update</button>
<button {{ action "clone" }} {{ bind-attr class=":btn :btn-default" }}>Clone</button>
<button {{ action "set" }} {{ bind-attr class=":btn :btn-default" }}>Use Token</button>
{{# if model.isNotAnon }}
<button {{ action "delete"}} {{ bind-attr class=":btn isLoading:btn-warning:btn-danger :pull-right" }}>Delete</button>
{{/if}}
</form>
</div>
</div>
<hr>
</script>
<script type="text/x-handlebars" id="index">
<div class="col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 col-xs-12 col-sm-12 vertical-center">
<h5>Select a datacenter</h5>
{{#each item in model}}
{{#link-to 'services' item }}
<div class="panel panel-link panel-short">
<div class="panel-bar bg-light-gray"></div>
<div class="panel-heading">
<h3 class="panel-title">
{{item}}
<span class="panel-note"></span>
</h3>
</div>
</div>
{{/link-to}}
{{/each}}
</div>
</script>
<script type="text/x-handlebars" id="settings">
<div class="col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 col-xs-12 col-sm-12">
<h3>Settings</h3>
<p>These settings allow you to configure your browser for the Consul Web UI. Everything is saved to localstorage,
and should persist through visits and browser usage.</p>
<p>Settings are automatically persisted upon modification, so no manual save is required.</p>
<h5>ACL Token</h5>
<div class="form-group">
{{ input type="text" value=model.token class="form-control form-mono" placeholder="token"}}
<span class="help-block">The token is sent with requests as the <code>?token</code> parameter. This is used to control the ACL for the
web UI.</span>
</div>
<div class="form-group">
<button {{ action "reset" }} {{ bind-attr class=":btn :btn-danger" }}>Reset Defaults</button>
<button {{ action "close" }} {{ bind-attr class=":btn :btn-default" }}>Close</button>
</div>
</div>
</script>
<script>
// Enable query params, must be loaded before ember is
EmberENV = {FEATURES: {'query-params-new': true}};
</script>
<!-- ASSETS -->
<script src="javascripts/libs/jquery-1.10.2.min.js"></script>
<script src="javascripts/libs/handlebars-1.3.0.min.js"></script>
<script src="javascripts/libs/base64.min.js"></script>
<script src="javascripts/libs/ember-debug.min.js"></script>
<script src="javascripts/libs/ember-validations.min.js"></script>
<script src="javascripts/libs/list-view.min.js"></script>
<script src="javascripts/libs/classie.js"></script>
<script src="javascripts/libs/notificationFx.js"></script>
<script src="javascripts/fixtures.js"></script>
<script src="javascripts/app/router.js"></script>
<script src="javascripts/app/routes.js"></script>
<script src="javascripts/app/models.js"></script>
<script src="javascripts/app/views.js"></script>
<script src="javascripts/app/controllers.js"></script>
<script src="javascripts/app/helpers.js"></script>
<!-- to activate the test runner, add the "?test" query string parameter -->
<script src="tests/runner.js"></script>
<!-- <script src="static/application.min.js"></script> -->
<!-- /ASSETS -->
</body>
</html>

View File

@ -1,534 +0,0 @@
App.ApplicationController = Ember.ObjectController.extend({
updateCurrentPath: function() {
App.set('currentPath', this.get('currentPath'));
}.observes('currentPath')
});
App.DcController = Ember.Controller.extend({
needs: ["application"],
// Whether or not the dropdown menu can be seen
isDropdownVisible: false,
isNotificationVisible: true,
datacenter: Ember.computed.alias('content'),
// Returns the total number of failing checks.
//
// We treat any non-passing checks as failing
//
totalChecksFailing: function() {
return this.get('nodes').reduce(function(sum, node) {
return sum + node.get('failingChecks');
}, 0);
}.property('nodes'),
totalChecksPassing: function() {
return this.get('nodes').reduce(function(sum, node) {
return sum + node.get('passingChecks');
}, 0);
}.property('nodes'),
//
// Returns the human formatted message for the button state
//
checkMessage: function() {
var failingChecks = this.get('totalChecksFailing');
var passingChecks = this.get('totalChecksPassing');
if (this.get('hasFailingChecks') === true) {
return failingChecks + ' failing';
} else {
return passingChecks + ' passing';
}
}.property('nodes'),
//
//
//
checkStatus: function() {
if (this.get('hasFailingChecks') === true) {
return "failing";
} else {
return "passing";
}
}.property('nodes'),
//
// Boolean if the datacenter has any failing checks.
//
hasFailingChecks: Ember.computed.gt('totalChecksFailing', 0),
init: function() {
if(App.get('settings.v1-notification-hidden', true)) {
this.set('isNotificationVisible', false);
}
},
actions: {
// Hide and show the dropdown menu
toggle: function(item){
this.toggleProperty('isDropdownVisible');
},
hideNotification: function(e) {
App.set('settings.v1-notification-hidden', true);
this.set('isNotificationVisible', false);
},
// Just hide the dropdown menu
hideDrop: function(item){
this.set('isDropdownVisible', false);
}
}
});
KvBaseController = Ember.ObjectController.extend({
getParentKeyRoute: function() {
if (this.get('isRoot')) {
return this.get('rootKey');
}
return this.get('parentKey');
},
transitionToNearestParent: function(parent) {
var controller = this;
var rootKey = controller.get('rootKey');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
Ember.$.ajax({
url: (formatUrl(consulHost + '/v1/kv/' + parent + '?keys', dc, token)),
type: 'GET'
}).then(function(data) {
controller.transitionToRoute('kv.show', parent);
}).fail(function(response) {
if (response.status === 404) {
controller.transitionToRoute('kv.show', rootKey);
}
});
controller.set('isLoading', false);
}
});
App.KvShowController = KvBaseController.extend(Ember.Validations.Mixin, {
needs: ["dc"],
dc: Ember.computed.alias("controllers.dc"),
isLoading: false,
actions: {
// Creates the key from the newKey model
// set on the route.
createKey: function() {
this.set('isLoading', true);
var controller = this;
var newKey = controller.get('newKey');
var parentKey = controller.get('parentKey');
var grandParentKey = controller.get('grandParentKey');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
// If we don't have a previous model to base
// on our parent, or we're not at the root level,
// add the prefix
if (parentKey !== undefined && parentKey !== "/") {
newKey.set('Key', (parentKey + newKey.get('Key')));
}
// Put the Key and the Value retrieved from the form
Ember.$.ajax({
url: (formatUrl(consulHost + "/v1/kv/" + newKey.get('Key'), dc, token)),
type: 'PUT',
data: newKey.get('Value')
}).then(function(response) {
// transition to the right place
if (newKey.get('isFolder') === true) {
controller.transitionToRoute('kv.show', newKey.get('Key'));
} else {
controller.transitionToRoute('kv.edit', newKey.get('Key'));
}
controller.set('isLoading', false);
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
});
},
deleteFolder: function() {
this.set('isLoading', true);
var controller = this;
var dc = controller.get('dc').get('datacenter');
var grandParent = controller.get('grandParentKey');
var token = App.get('settings.token');
if (window.confirm("Are you sure you want to delete this folder?")) {
// Delete the folder
Ember.$.ajax({
url: (formatUrl(consulHost + "/v1/kv/" + controller.get('parentKey') + '?recurse', dc, token)),
type: 'DELETE'
}).then(function(response) {
controller.transitionToNearestParent(grandParent);
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
});
}
}
}
});
App.KvEditController = KvBaseController.extend({
isLoading: false,
needs: ["dc"],
dc: Ember.computed.alias("controllers.dc"),
actions: {
// Updates the key set as the model on the route.
updateKey: function() {
this.set('isLoading', true);
var dc = this.get('dc').get('datacenter');
var key = this.get("model");
var controller = this;
var token = App.get('settings.token');
// Put the key and the decoded (plain text) value
// from the form.
Ember.$.ajax({
url: (formatUrl(consulHost + "/v1/kv/" + key.get('Key'), dc, token)),
type: 'PUT',
data: key.get('valueDecoded')
}).then(function(response) {
// If success, just reset the loading state.
controller.set('isLoading', false);
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
});
},
cancelEdit: function() {
this.set('isLoading', true);
this.transitionToRoute('kv.show', this.getParentKeyRoute());
this.set('isLoading', false);
},
deleteKey: function() {
this.set('isLoading', true);
var controller = this;
var dc = controller.get('dc').get('datacenter');
var key = controller.get("model");
var parent = controller.getParentKeyRoute();
var token = App.get('settings.token');
// Delete the key
Ember.$.ajax({
url: (formatUrl(consulHost + "/v1/kv/" + key.get('Key'), dc, token)),
type: 'DELETE'
}).then(function(data) {
controller.transitionToNearestParent(parent);
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
});
}
}
});
ItemBaseController = Ember.ArrayController.extend({
needs: ["dc", "application"],
queryParams: ["filter", "status", "condensed"],
dc: Ember.computed.alias("controllers.dc"),
condensed: true,
hasExpanded: true,
filterText: "Filter by name",
filter: "", // default
status: "any status", // default
statuses: ["any status", "passing", "failing"],
isShowingItem: function() {
var currentPath = this.get('controllers.application.currentPath');
return (currentPath === "dc.nodes.show" || currentPath === "dc.services.show");
}.property('controllers.application.currentPath'),
filteredContent: function() {
var filter = this.get('filter');
var status = this.get('status');
var items = this.get('items').filter(function(item){
return item.get('filterKey').toLowerCase().match(filter.toLowerCase());
});
switch (status) {
case "passing":
return items.filterBy('hasFailingChecks', false);
case "failing":
return items.filterBy('hasFailingChecks', true);
default:
return items;
}
}.property('filter', 'status', 'items.@each'),
actions: {
toggleCondensed: function() {
this.toggleProperty('condensed');
}
}
});
App.NodesShowController = Ember.ObjectController.extend({
needs: ["dc", "nodes"],
dc: Ember.computed.alias("controllers.dc"),
actions: {
invalidateSession: function(sessionId) {
this.set('isLoading', true);
var controller = this;
var node = controller.get('model');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
if (window.confirm("Are you sure you want to invalidate this session?")) {
// Delete the session
Ember.$.ajax({
url: (formatUrl(consulHost + "/v1/session/destroy/" + sessionId, dc, token)),
type: 'PUT'
}).then(function(response) {
return Ember.$.getJSON(formatUrl(consulHost + '/v1/session/node/' + node.Node, dc, token)).then(function(data) {
controller.set('sessions', data);
});
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
});
}
}
}
});
App.NodesController = ItemBaseController.extend({
items: Ember.computed.alias("nodes"),
});
App.ServicesController = ItemBaseController.extend({
items: Ember.computed.alias("services"),
});
App.AclsController = Ember.ArrayController.extend({
needs: ["dc", "application"],
queryParams: ["filter"],
filterText: "Filter by name or ID",
searchBar: true,
newAclButton: true,
types: ["client", "management"],
dc: Ember.computed.alias("controllers.dc"),
items: Ember.computed.alias("acls"),
filter: "",
isShowingItem: function() {
var currentPath = this.get('controllers.application.currentPath');
return (currentPath === "dc.acls.show");
}.property('controllers.application.currentPath'),
filteredContent: function() {
var filter = this.get('filter');
var items = this.get('items').filter(function(item, index, enumerable){
// First try to match on the name
var nameMatch = item.get('Name').toLowerCase().match(filter.toLowerCase());
if (nameMatch !== null) {
return nameMatch;
} else {
return item.get('ID').toLowerCase().match(filter.toLowerCase());
}
});
return items;
}.property('filter', 'items.@each'),
actions: {
createAcl: function() {
this.set('isLoading', true);
var controller = this;
var newAcl = controller.get('newAcl');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
// Create the ACL
Ember.$.ajax({
url: formatUrl(consulHost + '/v1/acl/create', dc, token),
type: 'PUT',
data: JSON.stringify(newAcl)
}).then(function(response) {
// transition to the acl
controller.transitionToRoute('acls.show', response.ID);
// Get the ACL again, including the newly created one
Ember.$.getJSON(formatUrl(consulHost + '/v1/acl/list', dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
objs.push(App.Acl.create(obj));
});
controller.set('items', objs);
});
controller.set('isLoading', false);
}).fail(function(response) {
// Render the error message on the form if the request failed
notify('Received error while creating ACL: ' + response.statusText, 8000);
controller.set('isLoading', false);
});
},
}
});
App.AclsShowController = Ember.ObjectController.extend({
needs: ["dc", "acls"],
dc: Ember.computed.alias("controllers.dc"),
isLoading: false,
types: ["client", "management"],
actions: {
set: function() {
this.set('isLoading', true);
var controller = this;
var acl = controller.get('model');
var dc = controller.get('dc').get('datacenter');
if (window.confirm("Are you sure you want to use this token for your session?")) {
// Set
var token = App.set('settings.token', acl.ID);
controller.transitionToRoute('services');
this.set('isLoading', false);
notify('Now using token: ' + acl.ID, 3000);
}
},
clone: function() {
this.set('isLoading', true);
var controller = this;
var acl = controller.get('model');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
// Set
controller.transitionToRoute('services');
Ember.$.ajax({
url: formatUrl(consulHost + '/v1/acl/clone/'+ acl.ID, dc, token),
type: 'PUT'
}).then(function(response) {
controller.transitionToRoute('acls.show', response.ID);
controller.set('isLoading', false);
notify('Successfully cloned token', 4000);
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
controller.set('isLoading', false);
});
},
delete: function() {
this.set('isLoading', true);
var controller = this;
var acl = controller.get('model');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
if (window.confirm("Are you sure you want to delete this token?")) {
Ember.$.ajax({
url: formatUrl(consulHost + '/v1/acl/destroy/'+ acl.ID, dc, token),
type: 'PUT'
}).then(function(response) {
Ember.$.getJSON(formatUrl(consulHost + '/v1/acl/list', dc, token)).then(function(data) {
objs = [];
data.map(function(obj){
if (obj.ID === "anonymous") {
objs.unshift(App.Acl.create(obj));
} else {
objs.push(App.Acl.create(obj));
}
});
controller.get('controllers.acls').set('acls', objs);
}).then(function() {
controller.transitionToRoute('acls');
controller.set('isLoading', false);
notify('ACL deleted successfully', 3000);
});
}).fail(function(response) {
// Render the error message on the form if the request failed
controller.set('errorMessage', 'Received error while processing: ' + response.statusText);
controller.set('isLoading', false);
});
}
},
updateAcl: function() {
this.set('isLoading', true);
var controller = this;
var acl = controller.get('model');
var dc = controller.get('dc').get('datacenter');
var token = App.get('settings.token');
// Update the ACL
Ember.$.ajax({
url: formatUrl(consulHost + '/v1/acl/update', dc, token),
type: 'PUT',
data: JSON.stringify(acl)
}).then(function(response) {
// transition to the acl
controller.set('isLoading', false);
notify('ACL updated successfully', 3000);
}).fail(function(response) {
// Render the error message on the form if the request failed
notify('Received error while updating ACL: ' + response.statusText, 8000);
controller.set('isLoading', false);
});
}
}
});
App.SettingsController = Ember.ObjectController.extend({
actions: {
reset: function() {
this.set('isLoading', true);
var controller = this;
if (window.confirm("Are your sure you want to reset your settings?")) {
localStorage.clear();
controller.set('content', App.Settings.create());
App.set('settings.token', '');
notify('Settings reset', 3000);
this.set('isLoading', false);
}
},
close: function() {
this.transitionToRoute('index');
}
}
});
App.ErrorController = Ember.ObjectController.extend({
actions: {
resetToken: function() {
App.set('settings.token', '');
this.transitionToRoute('settings');
},
backHome: function() {
this.transitionToRoute('index');
}
}
});

View File

@ -1,181 +0,0 @@
Ember.Handlebars.helper('panelBar', function(status) {
var highlightClass;
if (status == "passing") {
highlightClass = "bg-green";
} else {
highlightClass = "bg-orange";
}
return new Handlebars.SafeString('<div class="panel-bar ' + highlightClass + '"></div>');
});
Ember.Handlebars.helper('listBar', function(status) {
var highlightClass;
if (status == "passing") {
highlightClass = "bg-green";
} else {
highlightClass = "bg-orange";
}
return new Handlebars.SafeString('<div class="list-bar-horizontal ' + highlightClass + '"></div>');
});
Ember.Handlebars.helper('sessionName', function(session) {
var name;
if (session.Name === "") {
name = '<span>' + Handlebars.Utils.escapeExpression(session.ID) + '</span>';
} else {
name = '<span>' + Handlebars.Utils.escapeExpression(session.Name) + '</span>' + ' <small>' + Handlebars.Utils.escapeExpression(session.ID) + '</small>';
}
return new Handlebars.SafeString(name);
});
Ember.Handlebars.helper('sessionMeta', function(session) {
var meta = '<div class="metadata">' + Handlebars.Utils.escapeExpression(session.Behavior) + ' behavior</div>';
if (session.TTL !== "") {
meta = meta + '<div class="metadata">, ' + Handlebars.Utils.escapeExpression(session.TTL) + ' TTL</div>';
}
return new Handlebars.SafeString(meta);
});
Ember.Handlebars.helper('aclName', function(name, id) {
if (name === "") {
return id;
} else {
return new Handlebars.SafeString(Handlebars.Utils.escapeExpression(name) + ' <small class="pull-right no-case">' + Handlebars.Utils.escapeExpression(id) + '</small>');
}
});
Ember.Handlebars.helper('formatRules', function(rules) {
if (rules === "") {
return "No rules defined";
} else {
return rules;
}
});
Ember.Handlebars.helper('limit', function(str, limit) {
if (str.length > limit)
return str.substring(0, limit) + '...';
return str;
});
// We need to do this because of our global namespace properties. The
// service.Tags
Ember.Handlebars.helper('serviceTagMessage', function(tags) {
if (tags === null) {
return "No tags";
}
});
// Sends a new notification to the UI
function notify(message, ttl) {
if (window.notifications !== undefined && window.notifications.length > 0) {
$(window.notifications).each(function(i, v) {
v.dismiss();
});
}
var notification = new NotificationFx({
message : '<p>'+ message + '</p>',
layout : 'growl',
effect : 'slide',
type : 'notice',
ttl: ttl,
});
// show the notification
notification.show();
// Add the notification to the queue to be closed
window.notifications = [];
window.notifications.push(notification);
}
// Tomography
// TODO: not sure how to how do to this more Ember.js-y
function tomographyMouseOver(el) {
var buf = el.getAttribute('data-node') + ' - ' + el.getAttribute('data-distance') + 'ms';
var segment = el.getAttribute('data-segment');
if (segment !== "") {
buf += ' (Segment: ' + segment + ')';
}
document.getElementById('tomography-node-info').textContent = buf;
}
Ember.Handlebars.helper('tomographyGraph', function(tomography, size) {
// This is ugly, but I'm working around bugs with Handlebars and templating
// parts of svgs. Basically things render correctly the first time, but when
// stuff is updated for subsequent go arounds the templated parts don't show.
// It appears (based on google searches) that the replaced elements aren't
// being interpreted as http://www.w3.org/2000/svg. Anyway, this works and
// if/when Handlebars fixes the underlying issues all of this can be cleaned
// up drastically.
var max = -999999999;
tomography.distances.forEach(function (d, i) {
if (d.distance > max) {
max = d.distance;
}
});
var insetSize = size / 2 - 8;
var buf = '' +
' <svg width="' + size + '" height="' + size + '">' +
' <g class="tomography" transform="translate(' + (size / 2) + ', ' + (size / 2) + ')">' +
' <g>' +
' <circle class="background" r="' + insetSize + '"/>' +
' <circle class="axis" r="' + (insetSize * 0.25) + '"/>' +
' <circle class="axis" r="' + (insetSize * 0.5) + '"/>' +
' <circle class="axis" r="' + (insetSize * 0.75) + '"/>' +
' <circle class="border" r="' + insetSize + '"/>' +
' </g>' +
' <g class="lines">';
var distances = tomography.distances;
var n = distances.length;
if (tomography.n > 360) {
// We have more nodes than we want to show, take a random sampling to keep
// the number around 360.
var sampling = 360 / tomography.n;
distances = distances.filter(function (_, i) {
return i == 0 || i == n - 1 || Math.random() < sampling
});
// Re-set n to the filtered size
n = distances.length;
}
distances.forEach(function (d, i) {
buf += ' <line transform="rotate(' + (i * 360 / n) + ')" y2="' + (-insetSize * (d.distance / max)) + '" ' +
'data-node="' + Handlebars.Utils.escapeExpression(d.node) + '" data-distance="' + d.distance + '" data-segment="' + Handlebars.Utils.escapeExpression(d.segment) + '" onmouseover="tomographyMouseOver(this);"/>';
});
buf += '' +
' </g>' +
' <g class="labels">' +
' <circle class="point" r="5"/>' +
' <g class="tick" transform="translate(0, ' + (insetSize * -0.25 ) + ')">' +
' <line x2="70"/>' +
' <text x="75" y="0" dy=".32em">' + (max > 0 ? (parseInt(max * 25) / 100) : 0) + 'ms</text>' +
' </g>' +
' <g class="tick" transform="translate(0, ' + (insetSize * -0.5 ) + ')">' +
' <line x2="70"/>' +
' <text x="75" y="0" dy=".32em">' + (max > 0 ? (parseInt(max * 50) / 100) : 0)+ 'ms</text>' +
' </g>' +
' <g class="tick" transform="translate(0, ' + (insetSize * -0.75 ) + ')">' +
' <line x2="70"/>' +
' <text x="75" y="0" dy=".32em">' + (max > 0 ? (parseInt(max * 75) / 100) : 0) + 'ms</text>' +
' </g>' +
' <g class="tick" transform="translate(0, ' + (insetSize * -1) + ')">' +
' <line x2="70"/>' +
' <text x="75" y="0" dy=".32em">' + (max > 0 ? (parseInt(max * 100) / 100) : 0) + 'ms</text>' +
' </g>' +
' </g>' +
' </g>' +
' </svg>';
return new Handlebars.SafeString(buf);
});

View File

@ -1,314 +0,0 @@
//
// A Consul service.
//
App.Service = Ember.Object.extend({
//
// The number of failing checks within the service.
//
failingChecks: function() {
// If the service was returned from `/v1/internal/ui/services`
// then we have a aggregated value which we can just grab
if (this.get('ChecksCritical') !== undefined) {
return (this.get('ChecksCritical') + this.get('ChecksWarning'));
// Otherwise, we need to filter the child checks by both failing
// states
} else {
var checks = this.get('Checks');
return (checks.filterBy('Status', 'critical').get('length') +
checks.filterBy('Status', 'warning').get('length'));
}
}.property('Checks'),
//
// The number of passing checks within the service.
//
passingChecks: function() {
// If the service was returned from `/v1/internal/ui/services`
// then we have a aggregated value which we can just grab
if (this.get('ChecksPassing') !== undefined) {
return this.get('ChecksPassing');
// Otherwise, we need to filter the child checks by both failing
// states
} else {
return this.get('Checks').filterBy('Status', 'passing').get('length');
}
}.property('Checks'),
//
// The formatted message returned for the user which represents the
// number of checks failing or passing. Returns `1 passing` or `2 failing`
//
checkMessage: function() {
if (this.get('hasFailingChecks') === false) {
return this.get('passingChecks') + ' passing';
} else {
return this.get('failingChecks') + ' failing';
}
}.property('Checks'),
nodes: function() {
return (this.get('Nodes'));
}.property('Nodes'),
//
// Boolean of whether or not there are failing checks in the service.
// This is used to set color backgrounds and so on.
//
hasFailingChecks: Ember.computed.gt('failingChecks', 0),
//
// Key used for filtering through an array of this model, i.e s
// searching
//
filterKey: Ember.computed.alias('Name'),
});
//
// A Consul Node
//
App.Node = Ember.Object.extend({
//
// The number of failing checks within the service.
//
failingChecks: function() {
return this.get('Checks').reduce(function(sum, check) {
var status = Ember.get(check, 'Status');
// We view both warning and critical as failing
return (status === 'critical' || status === 'warning') ?
sum + 1 :
sum;
}, 0);
}.property('Checks'),
//
// The number of passing checks within the service.
//
passingChecks: function() {
return this.get('Checks').filterBy('Status', 'passing').get('length');
}.property('Checks'),
//
// The formatted message returned for the user which represents the
// number of checks failing or passing. Returns `1 passing` or `2 failing`
//
checkMessage: function() {
if (this.get('hasFailingChecks') === false) {
return this.get('passingChecks') + ' passing';
} else {
return this.get('failingChecks') + ' failing';
}
}.property('Checks'),
//
// Boolean of whether or not there are failing checks in the service.
// This is used to set color backgrounds and so on.
//
hasFailingChecks: Ember.computed.gt('failingChecks', 0),
//
// The number of services on the node
//
numServices: Ember.computed.alias('Services.length'),
services: Ember.computed.alias('Services'),
filterKey: Ember.computed.alias('Node')
});
//
// A key/value object
//
App.Key = Ember.Object.extend(Ember.Validations.Mixin, {
// Validates using the Ember.Validations library
validations: {
Key: { presence: true }
},
// Boolean if field should validate JSON
validateJson: false,
// Boolean if the key is valid
keyValid: Ember.computed.empty('errors.Key'),
// Boolean if the value is valid
valueValid: Ember.computed.empty('errors.Value'),
// Escape any user-entered parts that aren't URL-safe, but put slashes back since
// they are common in keys, and the UI lets users make "folders" by simply adding
// them to keys.
Key: function(key, value) {
// setter
if (arguments.length > 1) {
clean = value
try {
clean = decodeURIComponent(clean);
} catch (e) {
// If they've got something that's not valid URL syntax then keep going;
// this means that at worst we might end up double escaping some things.
}
clean = encodeURIComponent(clean).replace(/%2F/g, "/")
this.set('cleanKey', clean);
return clean;
}
// getter
return this.get('cleanKey')
}.property('Key'),
// The key with the parent removed.
// This is only for display purposes, and used for
// showing the key name inside of a nested key.
keyWithoutParent: function() {
return (this.get('Key').replace(this.get('parentKey'), ''));
}.property('Key'),
// Boolean if the key is a "folder" or not, i.e is a nested key
// that feels like a folder. Used for UI
isFolder: function() {
if (this.get('Key') === undefined) {
return false;
}
return (this.get('Key').slice(-1) === '/');
}.property('Key'),
// Boolean if the key is locked or now
isLocked: function() {
if (!this.get('Session')) {
return false;
} else {
return true;
}
}.property('Session'),
// Determines what route to link to. If it's a folder,
// it will link to kv.show. Otherwise, kv.edit
linkToRoute: function() {
if (this.get('Key').slice(-1) === '/') {
return 'kv.show';
} else {
return 'kv.edit';
}
}.property('Key'),
// The base64 decoded value of the key.
// if you set on this key, it will update
// the key.Value
valueDecoded: function(key, value) {
// setter
if (arguments.length > 1) {
this.set('Value', value);
return value;
}
// getter
// If the value is null, we don't
// want to try and base64 decode it, so just return
if (this.get('Value') === null) {
return "";
}
if (Base64.extendString) {
// you have to explicitly extend String.prototype
Base64.extendString();
}
// base64 decode the value
return (this.get('Value').fromBase64());
}.property('Value'),
// Check if JSON is valid by attempting a native JSON parse
isValidJson: function() {
var value;
try {
window.atob(this.get('Value'));
value = this.get('valueDecoded');
} catch (e) {
value = this.get('Value');
}
try {
JSON.parse(value);
return true;
} catch (e) {
return false;
}
}.property('Value'),
// An array of the key broken up by the /
keyParts: function() {
var key = this.get('Key');
// If the key is a folder, remove the last
// slash to split properly
if (key.slice(-1) == "/") {
key = key.substring(0, key.length - 1);
}
return key.split('/');
}.property('Key'),
// The parent Key is the key one level above this.Key
// key: baz/bar/foobar/
// grandParent: baz/bar/
parentKey: function() {
var parts = this.get('keyParts').toArray();
// Remove the last item, essentially going up a level
// in hierarchy
parts.pop();
return parts.join("/") + "/";
}.property('Key'),
// The grandParent Key is the key two levels above this.Key
// key: baz/bar/foobar/
// grandParent: baz/
grandParentKey: function() {
var parts = this.get('keyParts').toArray();
// Remove the last two items, jumping two levels back
parts.pop();
parts.pop();
return parts.join("/") + "/";
}.property('Key')
});
//
// An ACL
//
App.Acl = Ember.Object.extend({
isNotAnon: function() {
if (this.get('ID') === "anonymous"){
return false;
} else {
return true;
}
}.property('ID')
});
// Wrap localstorage with an ember object
App.Settings = Ember.Object.extend({
unknownProperty: function(key) {
return localStorage[key];
},
setUnknownProperty: function(key, value) {
if(Ember.isNone(value)) {
delete localStorage[key];
} else {
localStorage[key] = value;
}
this.notifyPropertyChange(key);
return value;
},
clear: function() {
this.beginPropertyChanges();
for (var i=0, l=localStorage.length; i<l; i++){
this.set(localStorage.key(i));
}
localStorage.clear();
this.endPropertyChanges();
}
});

View File

@ -1,59 +0,0 @@
window.App = Ember.Application.create({
rootElement: "#app",
currentPath: ''
});
Ember.Application.initializer({
name: 'settings',
initialize: function(container, application) {
application.set('settings', App.Settings.create());
if (App.get('settings.token') === undefined) {
App.set('settings.token', '');
}
}
});
App.Router.map(function() {
// Our parent datacenter resource sets the namespace
// for the entire application
this.resource("dc", {path: "/:dc"}, function() {
// Services represent a consul service
this.resource("services", { path: "/services" }, function(){
// Show an individual service
this.route("show", { path: "/*name" });
});
// Nodes represent a consul node
this.resource("nodes", { path: "/nodes" }, function() {
// Show an individual node
this.route("show", { path: "/:name" });
});
// Key/Value
this.resource("kv", { path: "/kv" }, function(){
this.route("index", { path: "/" });
// List keys. This is more like an index
this.route("show", { path: "/*key" });
// Edit a specific key
this.route("edit", { path: "/*key/edit" });
});
// ACLs
this.resource("acls", { path: "/acls" }, function(){
this.route("show", { path: "/:id" });
});
// Shows a page explaining that ACLs haven't been set-up
this.route("aclsdisabled", { path: "/aclsdisabled" });
// Shows a page explaining that the ACL token being used isn't
// authorized
this.route("unauthorized", { path: "/unauthorized" });
});
// Shows a datacenter picker. If you only have one
// it just redirects you through.
this.route("index", { path: "/" });
// The settings page is global.
this.resource("settings", { path: "/settings" });
});

View File

@ -1,462 +0,0 @@
//
// Superclass to be used by all of the main routes below.
//
App.BaseRoute = Ember.Route.extend({
rootKey: '',
condensedView: false,
// Don't record characters in browser history
// for the "search" query item (filter)
queryParams: {
filter: {
replace: true
}
},
getParentAndGrandparent: function(key) {
var parentKey = this.rootKey,
grandParentKey = this.rootKey,
parts = key.split('/');
if (parts.length > 0) {
parts.pop();
parentKey = parts.join("/") + "/";
}
if (parts.length > 1) {
parts.pop();
grandParentKey = parts.join("/") + "/";
}
return {
parent: parentKey,
grandParent: grandParentKey,
isRoot: parentKey === '/'
};
},
removeDuplicateKeys: function(keys, matcher) {
// Loop over the keys
keys.forEach(function(item, index) {
if (item.get('Key') == matcher) {
// If we are in a nested folder and the folder
// name matches our position, remove it
keys.splice(index, 1);
}
});
return keys;
},
actions: {
// Used to link to keys that are not objects,
// like parents and grandParents
linkToKey: function(key) {
if (key == "/") {
this.transitionTo('kv.show', "");
}
else if (key.slice(-1) === '/' || key === this.rootKey) {
this.transitionTo('kv.show', key);
} else {
this.transitionTo('kv.edit', key);
}
}
}
});
//
// The route for choosing datacenters, typically the first route loaded.
//
App.IndexRoute = App.BaseRoute.extend({
// Retrieve the list of datacenters
model: function(params) {
return Ember.$.getJSON(consulHost + '/v1/catalog/datacenters').then(function(data) {
return data;
});
},
afterModel: function(model, transition) {
// If we only have one datacenter, jump
// straight to it and bypass the global
// view
if (model.get('length') === 1) {
this.transitionTo('services', model[0]);
}
}
});
// The parent route for all resources. This keeps the top bar
// functioning, as well as the per-dc requests.
App.DcRoute = App.BaseRoute.extend({
model: function(params) {
var token = App.get('settings.token');
// Return a promise hash to retrieve the
// dcs and nodes used in the header
return Ember.RSVP.hash({
dc: params.dc,
dcs: Ember.$.getJSON(consulHost + '/v1/catalog/datacenters'),
nodes: Ember.$.getJSON(formatUrl(consulHost + '/v1/internal/ui/nodes', params.dc, token)).then(function(data) {
var objs = [];
// Merge the nodes into a list and create objects out of them
data.map(function(obj){
objs.push(App.Node.create(obj));
});
return objs;
}),
coordinates: Ember.$.getJSON(formatUrl(consulHost + '/v1/coordinate/nodes', params.dc, token)).then(function(data) {
return data;
})
});
},
setupController: function(controller, models) {
controller.set('content', models.dc);
controller.set('nodes', models.nodes);
controller.set('dcs', models.dcs);
controller.set('coordinates', models.coordinates);
controller.set('isDropdownVisible', false);
},
});
App.KvIndexRoute = App.BaseRoute.extend({
beforeModel: function() {
this.transitionTo('kv.show', this.rootKey);
}
});
App.KvShowRoute = App.BaseRoute.extend({
model: function(params) {
var key = params.key;
var dc = this.modelFor('dc').dc;
var token = App.get('settings.token');
// Return a promise has with the ?keys for that namespace
// and the original key requested in params
return Ember.RSVP.hash({
key: key,
keys: Ember.$.getJSON(formatUrl(consulHost + '/v1/kv/' + key + '?keys&seperator=/', dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
objs.push(App.Key.create({Key: obj}));
});
return objs;
})
});
},
setupController: function(controller, models) {
var key = models.key;
var parentKeys = this.getParentAndGrandparent(key);
models.keys = this.removeDuplicateKeys(models.keys, models.key);
controller.set('content', models.keys);
controller.set('parentKey', parentKeys.parent);
controller.set('grandParentKey', parentKeys.grandParent);
controller.set('isRoot', parentKeys.isRoot);
controller.set('newKey', App.Key.create());
controller.set('rootKey', this.rootKey);
}
});
App.KvEditRoute = App.BaseRoute.extend({
model: function(params) {
var key = params.key;
var dc = this.modelFor('dc').dc;
var parentKeys = this.getParentAndGrandparent(key);
var token = App.get('settings.token');
// Return a promise hash to get the data for both columns
return Ember.RSVP.hash({
dc: dc,
token: token,
key: Ember.$.getJSON(formatUrl(consulHost + '/v1/kv/' + key, dc, token)).then(function(data) {
// Convert the returned data to a Key
return App.Key.create().setProperties(data[0]);
}),
keys: keysPromise = Ember.$.getJSON(formatUrl(consulHost + '/v1/kv/' + parentKeys.parent + '?keys&seperator=/', dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
objs.push(App.Key.create({Key: obj}));
});
return objs;
}),
});
},
// Load the session on the key, if there is one
afterModel: function(models) {
if (models.key.get('isLocked')) {
return Ember.$.getJSON(formatUrl(consulHost + '/v1/session/info/' + models.key.Session, models.dc, models.token)).then(function(data) {
models.session = data[0];
return models;
});
} else {
return models;
}
},
setupController: function(controller, models) {
var key = models.key;
var parentKeys = this.getParentAndGrandparent(key.get('Key'));
models.keys = this.removeDuplicateKeys(models.keys, parentKeys.parent);
controller.set('content', models.key);
controller.set('parentKey', parentKeys.parent);
controller.set('grandParentKey', parentKeys.grandParent);
controller.set('isRoot', parentKeys.isRoot);
controller.set('siblings', models.keys);
controller.set('rootKey', this.rootKey);
controller.set('session', models.session);
}
});
App.ServicesRoute = App.BaseRoute.extend({
model: function(params) {
var dc = this.modelFor('dc').dc;
var token = App.get('settings.token');
// Return a promise to retrieve all of the services
return Ember.$.getJSON(formatUrl(consulHost + '/v1/internal/ui/services', dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
objs.push(App.Service.create(obj));
});
return objs;
});
},
setupController: function(controller, model) {
controller.set('services', model);
}
});
App.ServicesShowRoute = App.BaseRoute.extend({
model: function(params) {
var dc = this.modelFor('dc').dc;
var token = App.get('settings.token');
// Here we just use the built-in health endpoint, as it gives us everything
// we need.
return Ember.$.getJSON(formatUrl(consulHost + '/v1/health/service/' + params.name, dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
objs.push(App.Node.create(obj));
});
return objs;
});
},
setupController: function(controller, model) {
var tags = [];
model.map(function(obj){
if (obj.Service.Tags !== null) {
tags = tags.concat(obj.Service.Tags);
}
});
tags = tags.filter(function(n){ return n !== undefined; });
tags = tags.uniq().join(', ');
controller.set('content', model);
controller.set('tags', tags);
}
});
function distance(a, b) {
a = a.Coord;
b = b.Coord;
var sum = 0;
for (var i = 0; i < a.Vec.length; i++) {
var diff = a.Vec[i] - b.Vec[i];
sum += diff * diff;
}
var rtt = Math.sqrt(sum) + a.Height + b.Height;
var adjusted = rtt + a.Adjustment + b.Adjustment;
if (adjusted > 0.0) {
rtt = adjusted;
}
return Math.round(rtt * 100000.0) / 100.0;
}
App.NodesShowRoute = App.BaseRoute.extend({
model: function(params) {
var dc = this.modelFor('dc');
var token = App.get('settings.token');
var min = 999999999;
var max = -999999999;
var sum = 0;
var distances = [];
dc.coordinates.forEach(function (node) {
if (params.name == node.Node) {
var segment = node.Segment;
dc.coordinates.forEach(function (other) {
if (node.Node != other.Node && other.Segment == segment) {
var dist = distance(node, other);
distances.push({ node: other.Node, distance: dist, segment: segment });
sum += dist;
if (dist < min) {
min = dist;
}
if (dist > max) {
max = dist;
}
}
});
distances.sort(function (a, b) {
return a.distance - b.distance;
});
}
});
var n = distances.length;
var halfN = Math.floor(n / 2);
var median;
if (n > 0) {
if (n % 2) {
// odd
median = distances[halfN].distance;
} else {
median = (distances[halfN - 1].distance + distances[halfN].distance) / 2;
}
} else {
median = 0;
min = 0;
max = 0;
}
// Return a promise hash of the node
return Ember.RSVP.hash({
dc: dc.dc,
token: token,
tomography: {
distances: distances,
n: distances.length,
min: parseInt(min * 100) / 100,
median: parseInt(median * 100) / 100,
max: parseInt(max * 100) / 100
},
node: Ember.$.getJSON(formatUrl(consulHost + '/v1/internal/ui/node/' + params.name, dc.dc, token)).then(function(data) {
return App.Node.create(data);
})
});
},
// Load the sessions for the node
afterModel: function(models) {
return Ember.$.getJSON(formatUrl(consulHost + '/v1/session/node/' + models.node.Node, models.dc, models.token)).then(function(data) {
models.sessions = data;
return models;
});
},
setupController: function(controller, models) {
controller.set('content', models.node);
controller.set('sessions', models.sessions);
controller.set('tomography', models.tomography);
}
});
App.NodesRoute = App.BaseRoute.extend({
model: function(params) {
var dc = this.modelFor('dc').dc;
var token = App.get('settings.token');
// Return a promise containing the nodes
return Ember.$.getJSON(formatUrl(consulHost + '/v1/internal/ui/nodes', dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
objs.push(App.Node.create(obj));
});
return objs;
});
},
setupController: function(controller, model) {
controller.set('nodes', model);
}
});
App.AclsRoute = App.BaseRoute.extend({
model: function(params) {
var dc = this.modelFor('dc').dc;
var token = App.get('settings.token');
// Return a promise containing the ACLS
return Ember.$.getJSON(formatUrl(consulHost + '/v1/acl/list', dc, token)).then(function(data) {
var objs = [];
data.map(function(obj){
if (obj.ID === "anonymous") {
objs.unshift(App.Acl.create(obj));
} else {
objs.push(App.Acl.create(obj));
}
});
return objs;
});
},
actions: {
error: function(error, transition) {
// If consul returns 401, ACLs are disabled
if (error && error.status === 401) {
this.transitionTo('dc.aclsdisabled');
// If consul returns 403, they key isn't authorized for that
// action.
} else if (error && error.status === 403) {
this.transitionTo('dc.unauthorized');
}
return true;
}
},
setupController: function(controller, model) {
controller.set('acls', model);
controller.set('newAcl', App.Acl.create());
}
});
App.AclsShowRoute = App.BaseRoute.extend({
model: function(params) {
var dc = this.modelFor('dc').dc;
var token = App.get('settings.token');
// Return a promise hash of the ACLs
return Ember.RSVP.hash({
dc: dc,
acl: Ember.$.getJSON(formatUrl(consulHost + '/v1/acl/info/'+ params.id, dc, token)).then(function(data) {
return App.Acl.create(data[0]);
})
});
},
setupController: function(controller, models) {
controller.set('content', models.acl);
}
});
App.SettingsRoute = App.BaseRoute.extend({
model: function(params) {
return App.get('settings');
}
});
// Adds any global parameters we need to set to a url/path
function formatUrl(url, dc, token) {
if (token == null) {
token = "";
}
if (url.indexOf("?") > 0) {
// If our url has existing params
url = url + "&dc=" + dc;
url = url + "&token=" + token;
} else {
// Our url doesn't have params
url = url + "?dc=" + dc;
url = url + "&token=" + token;
}
return url;
}

View File

@ -1,81 +0,0 @@
//
// DC
//
App.DcView = Ember.View.extend({
templateName: 'dc',
classNames: 'dropdowns',
click: function(e){
if ($(e.target).is('.dropdowns')){
$('ul.dropdown-menu').hide();
}
}
});
App.ItemView = Ember.View.extend({
templateName: 'item'
});
//
// Services
//
App.ServicesView = Ember.View.extend({
templateName: 'services',
});
App.ServicesShowView = Ember.View.extend({
templateName: 'service'
});
App.ServicesLoadingView = Ember.View.extend({
templateName: 'item/loading'
});
//
// Nodes
//
App.NodesView = Ember.View.extend({
templateName: 'nodes'
});
App.NodesShowView = Ember.View.extend({
templateName: 'node'
});
App.NodesLoadingView = Ember.View.extend({
templateName: 'item/loading'
});
// KV
App.KvListView = Ember.View.extend({
templateName: 'kv'
});
// Actions
App.ActionBarView = Ember.View.extend({
templateName: 'actionbar'
});
// ACLS
App.AclView = Ember.View.extend({
templateName: 'acls',
});
App.AclsShowView = Ember.View.extend({
templateName: 'acl'
});
// Settings
App.SettingsView = Ember.View.extend({
templateName: 'settings',
});

View File

@ -1,317 +0,0 @@
//
// I intentionally am not using ember-data and the fixture
// adapter. I'm not confident the Consul UI API will be compatible
// without a bunch of wrangling, and it's really not enough updating
// of the models to justify the use of such a big component. getJSON
// *should* be enough.
//
window.fixtures = {}
//
// The array route, i.e /ui/<dc>/services, should return _all_ services
// in the DC
//
fixtures.services = [
{
"Name": "vagrant-cloud-http",
"Checks": [
{
"Name": "serfHealth",
"Status": "passing"
},
{
"Name": "fooHealth",
"Status": "critical"
},
{
"Name": "bazHealth",
"Status": "passing"
}
],
"Nodes": [
"node-10-0-1-109",
"node-10-0-1-102"
]
},
{
"Name": "vagrant-share-mux",
"Checks": [
{
"Name": "serfHealth",
"Status": "critical"
},
{
"Name": "fooHealth",
"Status": "passing"
},
{
"Name": "bazHealth",
"Status": "passing"
}
],
"Nodes": [
"node-10-0-1-109",
"node-10-0-1-102"
]
},
]
//
// This one is slightly more complicated to allow more UI interaction.
// It represents the route /ui/<dc>/services/<service> BUT it's what is
// BELOW the top-level key.
//
// So, what is actually returned should be similar to the /catalog/service/<service>
// endpoint.
fixtures.services_full = {
"vagrant-cloud-http":
// This array is what is actually expected from the API.
[
{
"ServicePort": 80,
"ServiceTags": null,
"ServiceName": "vagrant-cloud-http",
"ServiceID": "vagrant-cloud-http",
"Address": "10.0.1.109",
"Node": "node-10-0-1-109",
"Checks": [
{
"ServiceName": "",
"ServiceID": "",
"Notes": "",
"Status": "critical",
"Name": "Serf Health Status",
"CheckID": "serfHealth",
"Node": "node-10-0-1-109"
}
]
},
// A node
{
"ServicePort": 80,
"ServiceTags": null,
"ServiceName": "vagrant-cloud-http",
"ServiceID": "vagrant-cloud-http",
"Address": "10.0.1.102",
"Node": "node-10-0-1-102",
"Checks": [
{
"ServiceName": "",
"ServiceID": "",
"Notes": "",
"Status": "passing",
"Name": "Serf Health Status",
"CheckID": "serfHealth",
"Node": "node-10-0-1-102"
}
]
}
],
"vagrant-share-mux": [
// A node
{
"ServicePort": 80,
"ServiceTags": null,
"ServiceName": "vagrant-share-mux",
"ServiceID": "vagrant-share-mux",
"Address": "10.0.1.102",
"Node": "node-10-0-1-102",
"Checks": [
{
"ServiceName": "vagrant-share-mux",
"ServiceID": "vagrant-share-mux",
"Notes": "",
"Output": "200 ok",
"Status": "passing",
"Name": "Foo Healthy",
"CheckID": "fooHealth",
"Node": "node-10-0-1-102"
}
]
},
// A node
{
"ServicePort": 80,
"ServiceTags": null,
"ServiceName": "vagrant-share-mux",
"ServiceID": "vagrant-share-mux",
"Address": "10.0.1.109",
"Node": "node-10-0-1-109",
"Checks": [
{
"ServiceName": "",
"ServiceID": "",
"Notes": "",
"Output": "foobar baz",
"Status": "passing",
"Name": "Baz Status",
"CheckID": "bazHealth",
"Node": "node-10-0-1-109"
},
{
"ServiceName": "",
"ServiceID": "",
"Notes": "",
"Output": "foobar baz",
"Status": "critical",
"Name": "Serf Health Status",
"CheckID": "serfHealth",
"Node": "node-10-0-1-109"
}
]
}
]
}
//
// /ui/<dc>/nodes
// all the nodes
//
fixtures.nodes = [
{
"Address": "10.0.1.109",
"Name": "node-10-0-1-109",
"Services": [
"vagrant-share-mux",
"vagrant-cloud-http"
],
"Checks": [
{
"Name": "serfHealth",
"Status": "critical"
},
{
"Name": "bazHealth",
"Status": "passing"
}
]
},
{
"Address": "10.0.1.102",
"Name": "node-10-0-1-102",
"Services": [
"vagrant-share-mux",
"vagrant-cloud-http"
],
"Checks": [
{
"Name": "fooHealth",
"Status": "passing"
}
],
}
]
// These are for retrieving individual nodes. Same story as services,
// the top level key is just for the demo.
fixtures.nodes_full = {
"node-10-0-1-109":
// This is what would be returned.
{
"Services": [
{
"Port": 0,
"Tags": null,
"Service": "vagrant-share-mux",
"ID": "vagrant-share-mux"
},
{
"Port": 80,
"Tags": null,
"Service": "vagrant-cloud-http",
"ID": "vagrant-cloud-http"
}
],
"Node": {
"Address": "10.0.1.109",
"Node": "node-10-0-1-109"
},
"Checks": [
{
"ServiceName": "",
"ServiceID": "",
"Notes": "Checks the status of the serf agent",
"Status": "critical",
"Name": "Serf Health Status",
"CheckID": "serfHealth",
"Node": "node-10-0-1-109"
},
{
"ServiceName": "",
"ServiceID": "",
"Notes": "",
"Output": "foobar baz",
"Status": "passing",
"Name": "Baz Status",
"CheckID": "bazHealth",
"Node": "node-10-0-1-109"
}
]
},
"node-10-0-1-102": {
"Services": [
{
"Port": 0,
"Tags": null,
"Service": "vagrant-share-mux",
"ID": "vagrant-share-mux"
},
{
"Port": 80,
"Tags": null,
"Service": "vagrant-cloud-http",
"ID": "vagrant-cloud-http"
}
],
"Node": {
"Address": "10.0.1.102",
"Node": "node-10-0-1-102"
},
"Checks": [
{
"ServiceName": "",
"ServiceID": "",
"Notes": "Checks if the food is healthy",
"Output": "foobar baz",
"Status": "passing",
"Name": "Foo Healthy",
"CheckID": "fooStatus",
"Node": "node-10-0-1-102"
}
]
}
}
fixtures.dcs = ['nyc1', 'sf1', 'sg1']
fixtures.keys_full = {
"/": [
'foobar',
'application',
'web/'
],
"application": {
'key': 'application',
'value': 'foobarz'
},
"foobar": {
'key': 'foobar',
'value': 'baz'
},
"web/foo/bar": {
'key': 'web/foo/bar',
'value': 'baz'
},
"web/foo/baz": {
'key': 'web/foo/baz',
'value': 'test'
},
"web/": [
"web/foo/"
],
"web/foo/": [
"web/foo/bar",
"web/foo/baz"
]
};

View File

@ -1 +0,0 @@
(function(global){"use strict";var _Base64=global.Base64;var version="2.1.7";var buffer;if(typeof module!=="undefined"&&module.exports){buffer=require("buffer").Buffer}var b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64tab=function(bin){var t={};for(var i=0,l=bin.length;i<l;i++)t[bin.charAt(i)]=i;return t}(b64chars);var fromCharCode=String.fromCharCode;var cb_utob=function(c){if(c.length<2){var cc=c.charCodeAt(0);return cc<128?c:cc<2048?fromCharCode(192|cc>>>6)+fromCharCode(128|cc&63):fromCharCode(224|cc>>>12&15)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}else{var cc=65536+(c.charCodeAt(0)-55296)*1024+(c.charCodeAt(1)-56320);return fromCharCode(240|cc>>>18&7)+fromCharCode(128|cc>>>12&63)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}};var re_utob=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob=function(u){return u.replace(re_utob,cb_utob)};var cb_encode=function(ccc){var padlen=[0,2,1][ccc.length%3],ord=ccc.charCodeAt(0)<<16|(ccc.length>1?ccc.charCodeAt(1):0)<<8|(ccc.length>2?ccc.charCodeAt(2):0),chars=[b64chars.charAt(ord>>>18),b64chars.charAt(ord>>>12&63),padlen>=2?"=":b64chars.charAt(ord>>>6&63),padlen>=1?"=":b64chars.charAt(ord&63)];return chars.join("")};var btoa=global.btoa?function(b){return global.btoa(b)}:function(b){return b.replace(/[\s\S]{1,3}/g,cb_encode)};var _encode=buffer?function(u){return(u.constructor===buffer.constructor?u:new buffer(u)).toString("base64")}:function(u){return btoa(utob(u))};var encode=function(u,urisafe){return!urisafe?_encode(String(u)):_encode(String(u)).replace(/[+\/]/g,function(m0){return m0=="+"?"-":"_"}).replace(/=/g,"")};var encodeURI=function(u){return encode(u,true)};var re_btou=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g");var cb_btou=function(cccc){switch(cccc.length){case 4:var cp=(7&cccc.charCodeAt(0))<<18|(63&cccc.charCodeAt(1))<<12|(63&cccc.charCodeAt(2))<<6|63&cccc.charCodeAt(3),offset=cp-65536;return fromCharCode((offset>>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function(b){return b.replace(re_btou,cb_btou)};var cb_decode=function(cccc){var len=cccc.length,padlen=len%4,n=(len>0?b64tab[cccc.charAt(0)]<<18:0)|(len>1?b64tab[cccc.charAt(1)]<<12:0)|(len>2?b64tab[cccc.charAt(2)]<<6:0)|(len>3?b64tab[cccc.charAt(3)]:0),chars=[fromCharCode(n>>>16),fromCharCode(n>>>8&255),fromCharCode(n&255)];chars.length-=[0,0,2,1][padlen];return chars.join("")};var atob=global.atob?function(a){return global.atob(a)}:function(a){return a.replace(/[\s\S]{1,4}/g,cb_decode)};var _decode=buffer?function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(atob(a))};var decode=function(a){return _decode(String(a).replace(/[-_]/g,function(m0){return m0=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};var noConflict=function(){var Base64=global.Base64;global.Base64=_Base64;return Base64};global.Base64={VERSION:version,atob:atob,btoa:btoa,fromBase64:decode,toBase64:encode,utob:utob,encode:encode,encodeURI:encodeURI,btou:btou,decode:decode,noConflict:noConflict};if(typeof Object.defineProperty==="function"){var noEnum=function(v){return{value:v,enumerable:false,writable:true,configurable:true}};global.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",noEnum(function(){return decode(this)}));Object.defineProperty(String.prototype,"toBase64",noEnum(function(urisafe){return encode(this,urisafe)}));Object.defineProperty(String.prototype,"toBase64URI",noEnum(function(){return encode(this,true)}))}}})(this);if(this["Meteor"]){Base64=global.Base64}

View File

@ -1,80 +0,0 @@
/*!
* classie - class helper functions
* from bonzo https://github.com/ded/bonzo
*
* classie.has( elem, 'my-class' ) -> true/false
* classie.add( elem, 'my-new-class' )
* classie.remove( elem, 'my-unwanted-class' )
* classie.toggle( elem, 'my-class' )
*/
/*jshint browser: true, strict: true, undef: true */
/*global define: false */
( function( window ) {
'use strict';
// class helper functions from bonzo https://github.com/ded/bonzo
function classReg( className ) {
return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
}
// classList support for class management
// although to be fair, the api sucks because it won't accept multiple classes at once
var hasClass, addClass, removeClass;
if ( 'classList' in document.documentElement ) {
hasClass = function( elem, c ) {
return elem.classList.contains( c );
};
addClass = function( elem, c ) {
elem.classList.add( c );
};
removeClass = function( elem, c ) {
elem.classList.remove( c );
};
}
else {
hasClass = function( elem, c ) {
return classReg( c ).test( elem.className );
};
addClass = function( elem, c ) {
if ( !hasClass( elem, c ) ) {
elem.className = elem.className + ' ' + c;
}
};
removeClass = function( elem, c ) {
elem.className = elem.className.replace( classReg( c ), ' ' );
};
}
function toggleClass( elem, c ) {
var fn = hasClass( elem, c ) ? removeClass : addClass;
fn( elem, c );
}
var classie = {
// full names
hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
// short names
has: hasClass,
add: addClass,
remove: removeClass,
toggle: toggleClass
};
// transport
if ( typeof define === 'function' && define.amd ) {
// AMD
define( classie );
} else {
// browser global
window.classie = classie;
}
})( window );

View File

View File

@ -1,679 +0,0 @@
/*!
* @overview Ember - JavaScript Application Framework
* @copyright Copyright 2011-2014 Tilde Inc. and contributors
* Portions Copyright 2006-2011 Strobe Inc.
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
* @license Licensed under MIT license
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
* @version 1.7.0-beta.1+canary.3d81867a
*/
(function(){var t,S,ia,ka,D;(function(){D=this.Ember=this.Ember||{};"undefined"===typeof D&&(D={});if("undefined"===typeof D.__loader){var a={},m={};t=function(m,f,l){a[m]={deps:f,callback:l}};ka=ia=S=function(n){function f(b){if("."!==b.charAt(0))return b;b=b.split("/");for(var c=n.split("/").slice(0,-1),a=0,d=b.length;a<d;a++){var s=b[a];".."===s?c.pop():"."!==s&&c.push(s)}return c.join("/")}if(m.hasOwnProperty(n))return m[n];m[n]={};if(!a[n])throw Error("Could not find module "+n);for(var l=a[n],
k=l.deps,l=l.callback,d=[],h,c=0,b=k.length;c<b;c++)"exports"===k[c]?d.push(h={}):d.push(S(f(k[c])));k=l.apply(this,d);return m[n]=h||k};ka._eak_seen=a;D.__loader={define:t,require:ia,registry:a}}else t=D.__loader.define,ka=ia=S=D.__loader.require})();t("backburner",["backburner/utils","backburner/deferred_action_queues","exports"],function(a,m,n){function f(e,q){this.queueNames=e;this.options=q||{};this.options.defaultQueue||(this.options.defaultQueue=e[0]);this.instanceStack=[];this._debouncees=
[];this._throttlers=[]}function l(e){e.begin();e._autorun=y.setTimeout(function(){e._autorun=null;e.end()})}function k(e,q,b){if(!e._laterTimer||q<e._laterTimerExpiresAt)e._laterTimer=y.setTimeout(function(){e._laterTimer=null;e._laterTimerExpiresAt=null;d(e)},b),e._laterTimerExpiresAt=q}function d(e){var q=+new Date,b,r,c;e.run(function(){r=g(q,v);b=v.splice(0,r);r=1;for(c=b.length;r<c;r+=2)e.schedule(e.options.defaultQueue,null,b[r])});v.length&&k(e,v[0],v[0]-q)}function h(e,q,r){return b(e,q,r)}
function c(e,q,r){return b(e,q,r)}function b(e,q,b){for(var r,c=-1,g=0,a=b.length;g<a;g++)if(r=b[g],r[0]===e&&r[1]===q){c=g;break}return c}function g(e,q){for(var b=0,r=q.length-2,c;b<r;)c=(r-b)/2,c=b+c-c%2,e>=q[c]?b=c+2:r=c;return e>=q[b]?b+2:b}a=a["default"];var p=m.DeferredActionQueues,u=[].slice,w=[].pop,s=a.each,q=a.isString,e=a.isFunction,r=a.isNumber,v=[],y=this,A=/\d+/;try{(void 0)()}catch(x){}f.prototype={queueNames:null,options:null,currentInstance:null,instanceStack:null,begin:function(){var e=
this.options,q=e&&e.onBegin,b=this.currentInstance;b&&this.instanceStack.push(b);this.currentInstance=new p(this.queueNames,e);q&&q(this.currentInstance,b)},end:function(){var e=this.options,e=e&&e.onEnd,q=this.currentInstance,b=null;try{q.flush()}finally{this.currentInstance=null,this.instanceStack.length&&(this.currentInstance=b=this.instanceStack.pop()),e&&e(q,b)}},run:function(e,b){var r=this.options.onError||this.options.onErrorTarget&&this.options.onErrorTarget[this.options.onErrorMethod];this.begin();
b||(b=e,e=null);q(b)&&(b=e[b]);var c=u.call(arguments,2);if(r)try{return b.apply(e,c)}catch(g){r(g)}finally{this.end()}else try{return b.apply(e,c)}finally{this.end()}},defer:function(e,b,r){r||(r=b,b=null);q(r)&&(r=b[r]);var c=this.DEBUG?Error():void 0,g=3<arguments.length?u.call(arguments,3):void 0;this.currentInstance||l(this);return this.currentInstance.schedule(e,b,r,g,!1,c)},deferOnce:function(e,b,r){r||(r=b,b=null);q(r)&&(r=b[r]);var c=this.DEBUG?Error():void 0,g=3<arguments.length?u.call(arguments,
3):void 0;this.currentInstance||l(this);return this.currentInstance.schedule(e,b,r,g,!0,c)},setTimeout:function(){function b(){if(f)try{d.apply(s,c)}catch(e){f(e)}else d.apply(s,c)}var c=u.call(arguments),a=c.length,d,s,p,h;if(0!==a){if(1===a)d=c.shift(),a=0;else if(2===a)p=c[0],a=c[1],e(a)||e(p[a])?(s=c.shift(),d=c.shift(),a=0):r(a)||A.test(a)?(d=c.shift(),a=c.shift()):(d=c.shift(),a=0);else{a=c[c.length-1];a=r(a)||A.test(a)?c.pop():0;p=c[0];h=c[1];if(e(h)||q(h)&&null!==p&&h in p)s=c.shift();d=c.shift()}p=
+new Date+parseInt(a,10);q(d)&&(d=s[d]);var f=this.options.onError||this.options.onErrorTarget&&this.options.onErrorTarget[this.options.onErrorMethod];h=g(p,v);v.splice(h,0,p,b);k(this,p,a);return b}},throttle:function(e,c){var g=this,a=arguments,d=w.call(a),p,s;r(d)||q(d)?(p=d,d=!0):p=w.call(a);p=parseInt(p,10);s=b(e,c,this._throttlers);if(-1<s)return this._throttlers[s];p=y.setTimeout(function(){d||g.run.apply(g,a);var q=b(e,c,g._throttlers);-1<q&&g._throttlers.splice(q,1)},p);d&&g.run.apply(g,
a);p=[e,c,p];this._throttlers.push(p);return p},debounce:function(e,c){var g=this,a=arguments,d=w.call(a),p,s,v;r(d)||q(d)?(p=d,d=!1):p=w.call(a);p=parseInt(p,10);s=b(e,c,this._debouncees);-1<s&&(v=this._debouncees[s],this._debouncees.splice(s,1),clearTimeout(v[2]));p=y.setTimeout(function(){d||g.run.apply(g,a);var q=b(e,c,g._debouncees);-1<q&&g._debouncees.splice(q,1)},p);d&&-1===s&&g.run.apply(g,a);v=[e,c,p];g._debouncees.push(v);return v},cancelTimers:function(){var e=function(e){clearTimeout(e[2])};
s(this._throttlers,e);this._throttlers=[];s(this._debouncees,e);this._debouncees=[];this._laterTimer&&(clearTimeout(this._laterTimer),this._laterTimer=null);v=[];this._autorun&&(clearTimeout(this._autorun),this._autorun=null)},hasTimers:function(){return!!v.length||!!this._debouncees.length||!!this._throttlers.length||this._autorun},cancel:function(e){var b=typeof e;if(e&&"object"===b&&e.queue&&e.method)return e.queue.cancel(e);if("function"===b)for(var b=0,q=v.length;b<q;b+=2){if(v[b+1]===e)return v.splice(b,
2),!0}else if("[object Array]"===Object.prototype.toString.call(e))return this._cancelItem(c,this._throttlers,e)||this._cancelItem(h,this._debouncees,e)},_cancelItem:function(e,b,q){var r;if(3>q.length)return!1;r=e(q[0],q[1],b);return-1<r&&(e=b[r],e[2]===q[2])?(b.splice(r,1),clearTimeout(q[2]),!0):!1}};f.prototype.schedule=f.prototype.defer;f.prototype.scheduleOnce=f.prototype.deferOnce;f.prototype.later=f.prototype.setTimeout;n.Backburner=f});t("backburner/deferred_action_queues",["backburner/utils",
"backburner/queue","exports"],function(a,m,n){function f(a,c){var b=this.queues={};this.queueNames=a=a||[];this.options=c;k(a,function(g){b[g]=new l(this,g,c)})}a=a["default"];var l=m.Queue,k=a.each,d=a.isString;f.prototype={queueNames:null,queues:null,options:null,schedule:function(a,c,b,g,d,f){var k=this.queues[a];if(!k)throw Error("You attempted to schedule an action in a queue ("+a+") that doesn't exist");return d?k.pushUnique(c,b,g,f):k.push(c,b,g,f)},invoke:function(a,c,b,g){b&&0<b.length?c.apply(a,
b):c.call(a)},invokeWithOnError:function(a,c,b,g){try{b&&0<b.length?c.apply(a,b):c.call(a)}catch(d){g(d)}},flush:function(){var a=this.queues,c=this.queueNames,b,g,p=0,f=c.length,k=this.options,s=(k=k.onError||k.onErrorTarget&&k.onErrorTarget[k.onErrorMethod])?this.invokeWithOnError:this.invoke;a:for(;p<f;){b=c[p];b=a[b];g=b._queueBeingFlushed=b._queue.slice();b._queue=[];var q=b.options,e=q&&q.before,q=q&&q.after,r,v,l=0,A=g.length;for(A&&e&&e();l<A;)e=g[l],r=g[l+1],v=g[l+2],d(r)&&(r=e[r]),r&&s(e,
r,v,k),l+=4;b._queueBeingFlushed=null;A&&q&&q();b:{q=q=void 0;b=0;for(g=p;b<=g;b++)if(q=this.queueNames[b],q=this.queues[q],q._queue.length)break b;b=-1}if(-1!==b){p=b;continue a}p++}}};n.DeferredActionQueues=f});t("backburner/queue",["exports"],function(a){function m(a,f,l){this.daq=a;this.name=f;this.globalOptions=l;this.options=l[f];this._queue=[]}m.prototype={daq:null,name:null,options:null,onError:null,_queue:null,push:function(a,f,l,k){this._queue.push(a,f,l,k);return{queue:this,target:a,method:f}},
pushUnique:function(a,f,l,k){var d=this._queue,h,c,b,g;b=0;for(g=d.length;b<g;b+=4)if(h=d[b],c=d[b+1],h===a&&c===f)return d[b+2]=l,d[b+3]=k,{queue:this,target:a,method:f};d.push(a,f,l,k);return{queue:this,target:a,method:f}},flush:function(){var a=this._queue,f=this.globalOptions,l=this.options,k=l&&l.before,l=l&&l.after,f=f.onError||f.onErrorTarget&&f.onErrorTarget[f.onErrorMethod],d,h,c,b=a.length;b&&k&&k();for(c=0;c<b;c+=4)if(k=a[c],d=a[c+1],(h=a[c+2])&&0<h.length)if(f)try{d.apply(k,h)}catch(g){f(g)}else d.apply(k,
h);else if(f)try{d.call(k)}catch(p){f(p)}else d.call(k);b&&l&&l();a.length>b?(this._queue=a.slice(b),this.flush()):this._queue.length=0},cancel:function(a){var f=this._queue,l,k,d,h;d=0;for(h=f.length;d<h;d+=4)if(l=f[d],k=f[d+1],l===a.target&&k===a.method)return f.splice(d,4),!0;if(f=this._queueBeingFlushed){d=0;for(h=f.length;d<h;d+=4)if(l=f[d],k=f[d+1],l===a.target&&k===a.method)return f[d+1]=null,!0}}};a.Queue=m});t("backburner/utils",["exports"],function(a){a["default"]={each:function(a,n){for(var f=
0;f<a.length;f++)n(a[f])},isString:function(a){return"string"===typeof a},isFunction:function(a){return"function"===typeof a},isNumber:function(a){return"number"===typeof a}}});t("container",["container/container","exports"],function(a,m){D.MODEL_FACTORY_INJECTIONS=!1;D.ENV&&"undefined"!==typeof D.ENV.MODEL_FACTORY_INJECTIONS&&(D.MODEL_FACTORY_INJECTIONS=!!D.ENV.MODEL_FACTORY_INJECTIONS);m["default"]=a["default"]});t("container/container",["container/inheriting_dict","exports"],function(a,m){function n(b){this.parent=
b;this.children=[];this.resolver=b&&b.resolver||function(){};this.registry=new w(b&&b.registry);this.cache=new w(b&&b.cache);this.factoryCache=new w(b&&b.factoryCache);this.resolveCache=new w(b&&b.resolveCache);this.typeInjections=new w(b&&b.typeInjections);this.injections={};this.factoryTypeInjections=new w(b&&b.factoryTypeInjections);this.factoryInjections={};this._options=new w(b&&b._options);this._typeOptions=new w(b&&b._typeOptions)}function f(b,e,r){r=r||{};if(b.cache.has(e)&&!1!==r.singleton)return b.cache.get(e);
var a;a=h(b,e);a=!1===d(b,e,"instantiate")?a:a?"function"===typeof a.extend?a.create():a.create(c(b,e)):void 0;if(void 0!==a)return!1!==d(b,e,"singleton")&&!1!==r.singleton&&b.cache.set(e,a),a}function l(b){throw Error(b+" is not currently supported on child containers");}function k(b,e){var r={};if(!e)return r;for(var a,c,g=0,d=e.length;g<d;g++)if(a=e[g],c=f(b,a.fullName),void 0!==c)r[a.property]=c;else throw Error("Attempting to inject an unknown injection: `"+a.fullName+"`");return r}function d(b,
e,r){var a=b._options.get(e);if(a&&void 0!==a[r])return a[r];e=e.split(":")[0];if(a=b._typeOptions.get(e))return a[r]}function h(b,e){var r=b.resolve(e),a=b.factoryCache,g=e.split(":")[0];if(void 0!==r){if(a.has(e))return a.get(e);if(!r||"function"!==typeof r.extend||!D.MODEL_FACTORY_INJECTIONS&&"model"===g)return r;var g=c(b,e),d;d=e.split(":")[0];var p=[],p=p.concat(b.factoryTypeInjections.get(d)||[]),p=p.concat(b.factoryInjections[e]||[]),p=k(b,p);p._debugContainerKey=e;d=p;d._toString=b.makeToString(r,
e);r=r.extend(g);r.reopenClass(d);a.set(e,r);return r}}function c(b,e){var r=e.split(":")[0],a=[],a=a.concat(b.typeInjections.get(r)||[]),a=a.concat(b.injections[e]||[]),a=k(b,a);a._debugContainerKey=e;a.container=b;return a}function b(b,e){b.cache.eachLocal(function(r,a){!1!==d(b,r,"instantiate")&&e(a)})}function g(b){b.cache.eachLocal(function(e,r){!1!==d(b,e,"instantiate")&&r.destroy()});b.cache.dict={}}function p(b,e,r,a){var c=b.get(e);c||(c=[],b.set(e,c));c.push({property:r,fullName:a})}function u(b){if(!s.test(b))throw new TypeError("Invalid Fullname, expected: `type:name` got: "+
b);}var w=a["default"];n.prototype={parent:null,children:null,resolver:null,registry:null,cache:null,typeInjections:null,injections:null,_options:null,_typeOptions:null,child:function(){var b=new n(this);this.children.push(b);return b},set:function(b,e,r){b[e]=r},register:function(b,e,r){u(b);if(void 0===e)throw new TypeError("Attempting to register an unknown factory: `"+b+"`");var a=this.normalize(b);if(this.cache.has(a))throw Error("Cannot re-register: `"+b+"`, as it has already been looked up.");
this.registry.set(a,e);this._options.set(a,r||{})},unregister:function(b){u(b);b=this.normalize(b);this.registry.remove(b);this.cache.remove(b);this.factoryCache.remove(b);this.resolveCache.remove(b);this._options.remove(b)},resolve:function(b){u(b);b=this.normalize(b);var e=this.resolveCache.get(b);if(e)return e;e=this.resolver(b)||this.registry.get(b);this.resolveCache.set(b,e);return e},describe:function(b){return b},normalize:function(b){return b},makeToString:function(b,e){return b.toString()},
lookup:function(b,e){u(b);return f(this,this.normalize(b),e)},lookupFactory:function(b){u(b);return h(this,this.normalize(b))},has:function(b){u(b);b=this.normalize(b);b=this.cache.has(b)?!0:!!this.resolve(b);return b},optionsForType:function(b,e){this.parent&&l("optionsForType");this._typeOptions.set(b,e)},options:function(b,e){this.optionsForType(b,e)},typeInjection:function(b,e,a){u(a);this.parent&&l("typeInjection");if(a.split(":")[0]===b)throw Error("Cannot inject a `"+a+"` on other "+b+"(s). Register the `"+
a+"` as a different type and perform the typeInjection.");p(this.typeInjections,b,e,a)},injection:function(b,e,a){this.parent&&l("injection");u(a);var c=this.normalize(a);if(-1===b.indexOf(":"))return this.typeInjection(b,e,c);u(b);b=this.normalize(b);if(this.cache.has(b))throw Error("Attempted to register an injection for a type that has already been looked up. ('"+b+"', '"+e+"', '"+a+"')");a=this.injections;(a[b]=a[b]||[]).push({property:e,fullName:c})},factoryTypeInjection:function(b,e,a){this.parent&&
l("factoryTypeInjection");p(this.factoryTypeInjections,b,e,this.normalize(a))},factoryInjection:function(b,e,a){this.parent&&l("injection");var c=this.normalize(b),g=this.normalize(a);u(a);if(-1===b.indexOf(":"))return this.factoryTypeInjection(c,e,g);u(b);if(this.factoryCache.has(c))throw Error("Attempted to register a factoryInjection for a type that has already been looked up. ('"+c+"', '"+e+"', '"+a+"')");b=this.factoryInjections;(b[c]=b[c]||[]).push({property:e,fullName:g})},destroy:function(){for(var a=
0,e=this.children.length;a<e;a++)this.children[a].destroy();this.children=[];b(this,function(b){b.destroy()});this.parent=void 0;this.isDestroyed=!0},reset:function(){for(var b=0,e=this.children.length;b<e;b++)g(this.children[b]);g(this)}};var s=/^[^:]+.+:[^:]+$/;m["default"]=n});t("container/inheriting_dict",["exports"],function(a){function m(a){this.parent=a;this.dict={}}m.prototype={parent:null,dict:null,get:function(a){var f=this.dict;if(f.hasOwnProperty(a))return f[a];if(this.parent)return this.parent.get(a)},
set:function(a,f){this.dict[a]=f},remove:function(a){delete this.dict[a]},has:function(a){return this.dict.hasOwnProperty(a)?!0:this.parent?this.parent.has(a):!1},eachLocal:function(a,f){var l=this.dict,k;for(k in l)l.hasOwnProperty(k)&&a.call(f,k,l[k])}};a["default"]=m});t("ember-application","ember-metal/core ember-runtime/system/lazy_load ember-application/system/dag ember-application/system/resolver ember-application/system/application ember-application/ext/controller".split(" "),function(a,m,
n,f,l,k){a=a["default"];m=m.runLoadHooks;n=n["default"];k=f.Resolver;f=f.DefaultResolver;l=l["default"];a.Application=l;a.DAG=n;a.Resolver=k;a.DefaultResolver=f;m("Ember.Application",l)});t("ember-application/ext/controller","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/error ember-metal/utils ember-metal/computed ember-runtime/controllers/controller ember-routing/system/controller_for exports".split(" "),function(a,m,n,f,l,k,d,h,c){var b=a["default"],g=m.get,p=f["default"],
u=l.inspect;a=k.computed;d=d.ControllerMixin;var w=l.meta,s=h.controllerFor,q=a(function(){var b=this;return{needs:g(b,"needs"),container:g(b,"container"),unknownProperty:function(a){var c=this.needs,g,q,d;q=0;for(d=c.length;q<d;q++)if(g=c[q],g===a)return this.container.lookup("controller:"+a);a=u(b)+"#needs does not include `"+a+"`. To access the "+a+" controller from "+u(b)+", "+u(b)+" should have a `needs` property that is an array of the controllers it has access to.";throw new ReferenceError(a);
},setUnknownProperty:function(a,c){throw Error("You cannot overwrite the value of `controllers."+a+"` of "+u(b));}}});d.reopen({concatenatedProperties:["needs"],needs:[],init:function(){var e=g(this,"needs");if(0<g(e,"length")){b.assert(" `"+u(this)+" specifies `needs`, but does not have a container. Please ensure this controller was instantiated with a container.",this.container||w(this,!1).descs.controllers!==q);if(this.container){var a=this.container,c,d,s,f=[];d=0;for(s=e.length;d<s;d++)c=e[d],
b.assert(u(this)+"#needs must not specify dependencies with periods in their names ("+c+")",-1===c.indexOf(".")),-1===c.indexOf(":")&&(c="controller:"+c),a.has(c)||f.push(c);if(f.length)throw new p(u(this)+" needs [ "+f.join(", ")+" ] but "+(1<f.length?"they":"it")+" could not be found");}g(this,"controllers")}this._super.apply(this,arguments)},controllerFor:function(e){b.deprecate("Controller#controllerFor is deprecated, please use Controller#needs instead");return s(g(this,"container"),e)},controllers:q});
c["default"]=d});t("ember-application/system/application","ember-metal ember-metal/property_get ember-metal/property_set ember-runtime/system/lazy_load ember-application/system/dag ember-runtime/system/namespace ember-runtime/mixins/deferred ember-application/system/resolver ember-metal/platform ember-metal/run_loop ember-metal/utils container/container ember-runtime/controllers/controller ember-metal/enumerable_utils ember-runtime/controllers/object_controller ember-runtime/controllers/array_controller ember-views/system/event_dispatcher ember-views/system/jquery ember-routing/system/route ember-routing/system/router ember-routing/location/hash_location ember-routing/location/history_location ember-routing/location/auto_location ember-routing/location/none_location ember-handlebars-compiler exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r,v,y,A,x,G,B,C,E){function M(b){this._container=b}function L(b){function e(b){return a.resolve(b)}b.get("resolver")&&H.deprecate("Application.resolver is deprecated in favor of Application.Resolver",!1);var a=(b.get("resolver")||b.get("Resolver")||z).create({namespace:b});e.describe=function(b){return a.lookupDescription(b)};e.makeToString=function(b,e){return a.makeToString(b,e)};e.normalize=function(b){if(a.normalize)return a.normalize(b);H.deprecate("The Resolver should now provide a 'normalize' function",
!1);return b};e.__resolver__=a;return e}var H=a["default"],K=m.get,Q=n.set,I=f.runLoadHooks,t=l["default"];a=k["default"];d=d["default"];var z=h.DefaultResolver,F=c.create,P=b["default"],O=g.canInvoke,R=p["default"],X=u.Controller,U=w["default"],Y=s["default"],da=q["default"],ea=e["default"],V=r["default"],J=v["default"],Z=y["default"],na=A["default"],D=x["default"],T=G["default"],ca=B["default"],$=C["default"];h=H.K;var fa;M.deprecate=function(b){return function(){var e=this._container;H.deprecate("Using the defaultContainer is no longer supported. [defaultContainer#"+
b+"] see: http://git.io/EKPpnA",!1);return e[b].apply(e,arguments)}};M.prototype={_container:null,lookup:M.deprecate("lookup"),resolve:M.deprecate("resolve"),register:M.deprecate("register")};var aa=a.extend(d,{rootElement:"body",eventDispatcher:null,customEvents:null,_readinessDeferrals:1,init:function(){this.$||(this.$=V);this.__container__=this.buildContainer();this.Router=this.defaultRouter();this._super();this.scheduleInitialize();H.libraries.registerCoreLibrary("Handlebars",$.VERSION);H.libraries.registerCoreLibrary("jQuery",
V().jquery);if(H.LOG_VERSION){H.LOG_VERSION=!1;var b=U.map(H.libraries,function(b){return K(b,"name.length")}),e=Math.max.apply(this,b);H.debug("-------------------------------");H.libraries.each(function(b,a){var c=Array(e-b.length+1).join(" ");H.debug([b,c," : ",a].join(""))});H.debug("-------------------------------")}},buildContainer:function(){return this.__container__=aa.buildContainer(this)},defaultRouter:function(){if(!1!==this.Router){var b=this.__container__;this.Router&&(b.unregister("router:main"),
b.register("router:main",this.Router));return b.lookupFactory("router:main")}},scheduleInitialize:function(){var b=this;!this.$||this.$.isReady?P.schedule("actions",b,"_initialize"):this.$().ready(function(){P(b,"_initialize")})},deferReadiness:function(){H.assert("You must call deferReadiness on an instance of Ember.Application",this instanceof aa);H.assert("You cannot defer readiness since the `ready()` hook has already been called.",0<this._readinessDeferrals);this._readinessDeferrals++},advanceReadiness:function(){H.assert("You must call advanceReadiness on an instance of Ember.Application",
this instanceof aa);this._readinessDeferrals--;if(0===this._readinessDeferrals)P.once(this,this.didBecomeReady)},register:function(){var b=this.__container__;b.register.apply(b,arguments)},inject:function(){var b=this.__container__;b.injection.apply(b,arguments)},initialize:function(){H.deprecate("Calling initialize manually is not supported. Please see Ember.Application#advanceReadiness and Ember.Application#deferReadiness")},_initialize:function(){if(!this.isDestroyed){if(this.Router){var b=this.__container__;
b.unregister("router:main");b.register("router:main",this.Router)}this.runInitializers();I("application",this);this.advanceReadiness();return this}},reset:function(){this._readinessDeferrals=1;P.join(this,function(){this.__container__.lookup("router:main").reset();P(this.__container__,"destroy");this.buildContainer();P.schedule("actions",this,function(){this._initialize()})})},runInitializers:function(){var b=K(this.constructor,"initializers"),e=this.__container__,a=new t,c=this,r,g;for(r in b)g=
b[r],a.addEdges(g.name,g.initialize,g.before,g.after);a.topsort(function(b){var a=b.value;H.assert("No application initializer named '"+b.name+"'",a);a(e,c)})},didBecomeReady:function(){this.setupEventDispatcher();this.ready();this.startRouting();H.testing||(H.Namespace.processAll(),H.BOOTED=!0);this.resolve(this)},setupEventDispatcher:function(){var b=K(this,"customEvents"),e=K(this,"rootElement"),a=this.__container__.lookup("event_dispatcher:main");Q(this,"eventDispatcher",a);a.setup(b,e)},startRouting:function(){var b=
this.__container__.lookup("router:main");b&&b.startRouting()},handleURL:function(b){this.__container__.lookup("router:main").handleURL(b)},ready:h,resolver:null,Resolver:null,willDestroy:function(){H.BOOTED=!1;this.__container__.lookup("router:main").reset();this.__container__.destroy()},initializer:function(b){this.constructor.initializer(b)}});aa.reopenClass({initializers:{},initializer:function(b){void 0!==this.superclass.initializers&&this.superclass.initializers===this.initializers&&this.reopenClass({initializers:F(this.initializers)});
H.assert("The initializer '"+b.name+"' has already been registered",!this.initializers[b.name]);H.assert("An initializer cannot be registered with both a before and an after",!(b.before&&b.after));H.assert("An initializer cannot be registered without an initialize function",O(b,"initialize"));this.initializers[b.name]=b},buildContainer:function(b){var e=new R;R.defaultContainer=new M(e);e.set=Q;e.resolver=L(b);e.normalize=e.resolver.normalize;e.describe=e.resolver.describe;e.makeToString=e.resolver.makeToString;
e.optionsForType("component",{singleton:!1});e.optionsForType("view",{singleton:!1});e.optionsForType("template",{instantiate:!1});e.optionsForType("helper",{instantiate:!1});e.register("application:main",b,{instantiate:!1});e.register("controller:basic",X,{instantiate:!1});e.register("controller:object",Y,{instantiate:!1});e.register("controller:array",da,{instantiate:!1});e.register("route:basic",J,{instantiate:!1});e.register("event_dispatcher:main",ea);e.register("router:main",Z);e.injection("router:main",
"namespace","application:main");e.register("location:auto",T);e.register("location:hash",na);e.register("location:history",D);e.register("location:none",ca);e.injection("controller","target","router:main");e.injection("controller","namespace","application:main");e.injection("route","router","router:main");e.injection("location","rootURL","-location-setting:root-url");e.register("resolver-for-debugging:main",e.resolver.__resolver__,{instantiate:!1});e.injection("container-debug-adapter:main","resolver",
"resolver-for-debugging:main");e.injection("data-adapter:main","containerDebugAdapter","container-debug-adapter:main");fa||(fa=S("ember-extension-support/container_debug_adapter")["default"]);e.register("container-debug-adapter:main",fa);return e}});E["default"]=aa});t("ember-application/system/dag",["ember-metal/error","exports"],function(a,m){function n(a,d,f,c){var b=a.name,g=a.incoming,p=a.incomingNames,u=p.length;f||(f={});c||(c=[]);if(!f.hasOwnProperty(b)){c.push(b);f[b]=!0;for(b=0;b<u;b++)n(g[p[b]],
d,f,c);d(a,c);c.pop()}}function f(){this.names=[];this.vertices={}}var l=a["default"];f.prototype.add=function(a){if(a){if(this.vertices.hasOwnProperty(a))return this.vertices[a];var d={name:a,incoming:{},incomingNames:[],hasOutgoing:!1,value:null};this.vertices[a]=d;this.names.push(a);return d}};f.prototype.map=function(a,d){this.add(a).value=d};f.prototype.addEdge=function(a,d){function f(b,a){if(b.name===d)throw new l("cycle detected: "+d+" <- "+a.join(" <- "));}if(a&&d&&a!==d){var c=this.add(a),
b=this.add(d);b.incoming.hasOwnProperty(a)||(n(c,f),c.hasOutgoing=!0,b.incoming[a]=c,b.incomingNames.push(a))}};f.prototype.topsort=function(a){var d={},f=this.vertices,c=this.names,b=c.length,g,p;for(g=0;g<b;g++)p=f[c[g]],p.hasOutgoing||n(p,a,d)};f.prototype.addEdges=function(a,d,f,c){this.map(a,d);if(f)if("string"===typeof f)this.addEdge(a,f);else for(d=0;d<f.length;d++)this.addEdge(a,f[d]);if(c)if("string"===typeof c)this.addEdge(c,a);else for(d=0;d<c.length;d++)this.addEdge(c[d],a)};m["default"]=
f});t("ember-application/system/resolver","ember-metal/core ember-metal/property_get ember-metal/logger ember-runtime/system/string ember-runtime/system/object ember-runtime/system/namespace ember-handlebars exports".split(" "),function(a,m,n,f,l,k,d,h){var c=a["default"],b=m.get,g=n["default"],p=f.classify,u=f.capitalize,w=f.decamelize;a=l["default"];var s=k["default"],q=d["default"];k=a.extend({namespace:null,normalize:function(b){throw Error("Invalid call to `resolver.normalize(fullName)`. Please override the 'normalize' method in subclass of `Ember.Resolver` to prevent falling through to this error.");
},resolve:function(b){throw Error("Invalid call to `resolver.resolve(parsedName)`. Please override the 'resolve' method in subclass of `Ember.Resolver` to prevent falling through to this error.");},parseName:function(b){throw Error("Invalid call to `resolver.resolveByType(parsedName)`. Please override the 'resolveByType' method in subclass of `Ember.Resolver` to prevent falling through to this error.");},lookupDescription:function(b){throw Error("Invalid call to `resolver.lookupDescription(fullName)`. Please override the 'lookupDescription' method in subclass of `Ember.Resolver` to prevent falling through to this error.");
},makeToString:function(b,a){throw Error("Invalid call to `resolver.makeToString(factory, fullName)`. Please override the 'makeToString' method in subclass of `Ember.Resolver` to prevent falling through to this error.");},resolveOther:function(b){throw Error("Invalid call to `resolver.resolveOther(parsedName)`. Please override the 'resolveOther' method in subclass of `Ember.Resolver` to prevent falling through to this error.");},_logLookup:function(b,a){throw Error("Invalid call to `resolver._logLookup(found, parsedName)`. Please override the '_logLookup' method in subclass of `Ember.Resolver` to prevent falling through to this error.");
}});h.Resolver=k;k=a.extend({namespace:null,normalize:function(b){var a=b.split(":",2),g=a[0],q=a[1];c.assert("Tried to normalize a container name without a colon (:) in it. You probably tried to lookup a name that did not contain a type, a colon, and a name. A proper lookup name would be `view:post`.",2===a.length);return"template"!==g?(b=q,-1<b.indexOf(".")&&(b=b.replace(/\.(.)/g,function(b){return b.charAt(1).toUpperCase()})),-1<q.indexOf("_")&&(b=b.replace(/_(.)/g,function(b){return b.charAt(1).toUpperCase()})),
g+":"+b):b},resolve:function(b){var a=this.parseName(b),c=a.resolveMethodName,g;if(!a.name||!a.type)throw new TypeError("Invalid fullName: `"+b+"`, must be of the form `type:name` ");this[c]&&(g=this[c](a));g||(g=this.resolveOther(a));a.root&&a.root.LOG_RESOLVER&&this._logLookup(g,a);return g},parseName:function(e){var a=e.split(":"),g=a[0],q=a=a[1],d=b(this,"namespace");if("template"!==g&&-1!==q.indexOf("/")){var d=q.split("/"),q=d[d.length-1],f=u(d.slice(0,-1).join(".")),d=s.byName(f);c.assert("You are looking for a "+
q+" "+g+" in the "+f+" namespace, but the namespace could not be found",d)}return{fullName:e,type:g,fullNameWithoutType:a,name:q,root:d,resolveMethodName:"resolve"+p(g)}},lookupDescription:function(b){b=this.parseName(b);if("template"===b.type)return"template at "+b.fullNameWithoutType.replace(/\./g,"/");var a=b.root+"."+p(b.name);"model"!==b.type&&(a+=p(b.type));return a},makeToString:function(b,a){return b.toString()},useRouterNaming:function(b){b.name=b.name.replace(/\./g,"_");"basic"===b.name&&
(b.name="")},resolveTemplate:function(b){b=b.fullNameWithoutType.replace(/\./g,"/");if(c.TEMPLATES[b])return c.TEMPLATES[b];b=w(b);if(c.TEMPLATES[b])return c.TEMPLATES[b]},resolveView:function(b){this.useRouterNaming(b);return this.resolveOther(b)},resolveController:function(b){this.useRouterNaming(b);return this.resolveOther(b)},resolveRoute:function(b){this.useRouterNaming(b);return this.resolveOther(b)},resolveModel:function(a){var c=p(a.name);if(a=b(a.root,c))return a},resolveHelper:function(b){return this.resolveOther(b)||
q.helpers[b.fullNameWithoutType]},resolveOther:function(a){var c=p(a.name)+p(a.type);if(a=b(a.root,c))return a},_logLookup:function(b,a){var c,q;c=b?"[\u2713]":"[ ]";q=60<a.fullName.length?".":Array(60-a.fullName.length).join(".");g.info(c,a.fullName,q,this.lookupDescription(a.fullName))}});h.DefaultResolver=k});t("ember-debug",["ember-metal/core","ember-metal/error","ember-metal/logger"],function(a,m,n){var f=a["default"],l=m["default"],k=n["default"];f.assert=function(a,b){if(!b)throw new l("Assertion Failed: "+
a);};f.warn=function(a,b){b||(k.warn("WARNING: "+a),"trace"in k&&k.trace())};f.debug=function(a){k.debug("DEBUG: "+a)};f.deprecate=function(a,b){if(!b){if(f.ENV.RAISE_ON_DEPRECATION)throw new l(a);var g;try{__fail__.fail()}catch(d){g=d}if(f.LOG_STACKTRACE_ON_DEPRECATION&&g.stack){var h="";g.arguments?(g=g.stack.replace(/^\s+at\s+/gm,"").replace(/^([^\(]+?)([\n$])/gm,"{anonymous}($1)$2").replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm,"{anonymous}($1)").split("\n"),g.shift()):g=g.stack.replace(/(?:\n@:0)?\s+$/m,
"").replace(/^\(/gm,"{anonymous}(").split("\n");h="\n "+g.slice(2).join("\n ");a+=h}k.warn("DEPRECATION: "+a)}};f.deprecateFunc=function(a,b){return function(){f.deprecate(a);return b.apply(this,arguments)}};f.runInDebug=function(a){a()};if(!f.testing){var d="undefined"!==typeof InstallTrigger,h=!!window.chrome&&!window.opera;"undefined"!==typeof window&&((d||h)&&window.addEventListener)&&window.addEventListener("load",function(){if(document.documentElement&&document.documentElement.dataset&&
!document.documentElement.dataset.emberExtension){var a;h?a="https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi":d&&(a="https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/");f.debug("For more advanced debugging, install the Ember Inspector from "+a)}},!1)}});t("ember-extension-support",["ember-metal/core","ember-extension-support/data_adapter","ember-extension-support/container_debug_adapter"],function(a,m,n){a=a["default"];n=n["default"];a.DataAdapter=
m["default"];a.ContainerDebugAdapter=n});t("ember-extension-support/container_debug_adapter","ember-metal/core ember-metal/utils ember-runtime/system/string ember-runtime/system/namespace ember-runtime/system/object exports".split(" "),function(a,m,n,f,l,k){var d=a["default"],h=m.typeOf,c=n.dasherize,b=n.classify,g=f["default"];a=l["default"].extend({container:null,resolver:null,canCatalogEntriesByType:function(b){return"model"===b||"template"===b?!1:!0},catalogEntriesByType:function(a){var f=d.A(g.NAMESPACES),
k=d.A(),s=RegExp(b(a)+"$");f.forEach(function(b){if(b!==d)for(var a in b)b.hasOwnProperty(a)&&s.test(a)&&"class"===h(b[a])&&k.push(c(a.replace(s,"")))});return k}});k["default"]=a});t("ember-extension-support/data_adapter","ember-metal/core ember-metal/property_get ember-metal/run_loop ember-runtime/system/string ember-runtime/system/namespace ember-runtime/system/object ember-runtime/system/native_array ember-application/system/application exports".split(" "),function(a,m,n,f,l,k,d,h,c){var b=a["default"],
g=m.get,p=n["default"],u=f.dasherize,w=l["default"],s=d.A,q=h["default"];c["default"]=k["default"].extend({init:function(){this._super();this.releaseMethods=s()},container:null,containerDebugAdapter:void 0,attributeLimit:3,releaseMethods:s(),getFilters:function(){return s()},watchModelTypes:function(b,a){var c=this.getModelTypes(),g=this,q=s(),c=c.map(function(b){var e=b.klass;b=g.wrapModelType(e,b.name);q.push(g.observeModelType(e,a));return b});b(c);var d=function(){q.forEach(function(b){b()});
g.releaseMethods.removeObject(d)};this.releaseMethods.pushObject(d);return d},_nameToClass:function(b){"string"===typeof b&&(b=this.container.lookupFactory("model:"+b));return b},watchRecords:function(a,c,g,q){var d=this,p=s(),f=this.getRecords(a),h,k=function(b){g([b])};a=f.map(function(b){p.push(d.observeRecord(b,k));return d.wrapRecord(b)});var u={didChange:function(b,a,e,g){for(var s=a;s<a+g;s++){var f=b.objectAt(s),h=d.wrapRecord(f);p.push(d.observeRecord(f,k));c([h])}e&&q(a,e)},willChange:b.K};
f.addArrayObserver(d,u);h=function(){p.forEach(function(b){b()});f.removeArrayObserver(d,u);d.releaseMethods.removeObject(h)};c(a);this.releaseMethods.pushObject(h);return h},willDestroy:function(){this._super();this.releaseMethods.forEach(function(b){b()})},detect:function(b){return!1},columnsForType:function(b){return s()},observeModelType:function(a,c){var g=this,q=this.getRecords(a),d=function(){c([g.wrapModelType(a)])},s={didChange:function(){p.scheduleOnce("actions",this,d)},willChange:b.K};
q.addArrayObserver(this,s);return function(){q.removeArrayObserver(g,s)}},wrapModelType:function(b,a){var c=this.getRecords(b);return{name:a||b.toString(),count:g(c,"length"),columns:this.columnsForType(b),object:b}},getModelTypes:function(){var b,a=this;b=this.get("containerDebugAdapter");b=b.canCatalogEntriesByType("model")?b.catalogEntriesByType("model"):this._getObjectsOnNamespaces();b=s(b).map(function(b){return{klass:a._nameToClass(b),name:b}});b=s(b).filter(function(b){return a.detect(b.klass)});
return s(b)},_getObjectsOnNamespaces:function(){var b=s(w.NAMESPACES),a=s(),c=this;b.forEach(function(b){for(var e in b)if(b.hasOwnProperty(e)&&c.detect(b[e])){var g=u(e);!(b instanceof q)&&b.toString()&&(g=b+"/"+g);a.push(g)}});return a},getRecords:function(b){return s()},wrapRecord:function(b){var a={object:b};a.columnValues=this.getRecordColumnValues(b);a.searchKeywords=this.getRecordKeywords(b);a.filterValues=this.getRecordFilterValues(b);a.color=this.getRecordColor(b);return a},getRecordColumnValues:function(b){return{}},
getRecordKeywords:function(b){return s()},getRecordFilterValues:function(b){return{}},getRecordColor:function(b){return null},observeRecord:function(b,a){return function(){}}})});t("ember-extension-support/initializers",[],function(){});t("ember-handlebars-compiler",["ember-metal/core","exports"],function(a,m){var n=a["default"];"undefined"===typeof n.assert&&(n.assert=function(){});"undefined"===typeof n.FEATURES&&(n.FEATURES={isEnabled:function(){}});var f=Object.create||function(b){function a(){}
a.prototype=b;return new a},l,k,d=n.imports&&n.imports.Handlebars||this&&this.Handlebars;!d&&"function"===typeof ia&&(d=ia("handlebars"));n.assert("Ember Handlebars requires Handlebars version 1.0 or 1.1. Include a SCRIPT tag in the HTML HEAD linking to the Handlebars file before you link to Ember.",d);n.assert("Ember Handlebars requires Handlebars version 1.0 or 1.1, COMPILER_REVISION expected: 4, got: "+d.COMPILER_REVISION+" - Please note: Builds of master may have other COMPILER_REVISION values.",
4===d.COMPILER_REVISION);var h=n.Handlebars=f(d);h.helper=function(b,a){l||(l=S("ember-views/views/view").View);k||(k=S("ember-views/views/component")["default"]);n.assert("You tried to register a component named '"+b+"', but component names must include a '-'",!k.detect(a)||b.match(/-/));l.detect(a)?h.registerHelper(b,h.makeViewHelper(a)):h.registerBoundHelper.apply(null,arguments)};h.makeViewHelper=function(b){return function(a){n.assert("You can only pass attributes (such as name=value) not bare values to a helper for a View found in '"+
b.toString()+"'",2>arguments.length);return h.helpers.view.call(this,b,a)}};h.helpers=f(d.helpers);h.Compiler=function(){};d.Compiler&&(h.Compiler.prototype=f(d.Compiler.prototype));h.Compiler.prototype.compiler=h.Compiler;h.JavaScriptCompiler=function(){};d.JavaScriptCompiler&&(h.JavaScriptCompiler.prototype=f(d.JavaScriptCompiler.prototype),h.JavaScriptCompiler.prototype.compiler=h.JavaScriptCompiler);h.JavaScriptCompiler.prototype.namespace="Ember.Handlebars";h.JavaScriptCompiler.prototype.initializeBuffer=
function(){return"''"};h.JavaScriptCompiler.prototype.appendToBuffer=function(b){return"data.buffer.push("+b+");"};var c=/helpers\.(.*?)\)/,b=/helpers\['(.*?)'/,g=/(.*blockHelperMissing\.call\(.*)(stack[0-9]+)(,.*)/;h.JavaScriptCompiler.stringifyLastBlockHelperMissingInvocation=function(a){var q=a[a.length-1],e=(c.exec(q)||b.exec(q))[1],q=g.exec(q);a[a.length-1]=q[1]+"'"+e+"'"+q[3]};var p=h.JavaScriptCompiler.stringifyLastBlockHelperMissingInvocation,u=h.JavaScriptCompiler.prototype.blockValue;h.JavaScriptCompiler.prototype.blockValue=
function(){u.apply(this,arguments);p(this.source)};var w=h.JavaScriptCompiler.prototype.ambiguousBlockValue;h.JavaScriptCompiler.prototype.ambiguousBlockValue=function(){w.apply(this,arguments);p(this.source)};h.Compiler.prototype.mustache=function(b){if(!b.params.length&&!b.hash){var a=new d.AST.IdNode([{part:"_triageMustache"}]);b.escaped||(b.hash=b.hash||new d.AST.HashNode([]),b.hash.pairs.push(["unescaped",new d.AST.StringNode("true")]));b=new d.AST.MustacheNode([a].concat([b.id]),b.hash,!b.escaped)}return d.Compiler.prototype.mustache.call(this,
b)};h.precompile=function(b,a){var e=d.parse(b),c={knownHelpers:{action:!0,unbound:!0,"bind-attr":!0,template:!0,view:!0,_triageMustache:!0},data:!0,stringParams:!0};a=void 0===a?!0:a;e=(new h.Compiler).compile(e,c);return(new h.JavaScriptCompiler).compile(e,c,void 0,a)};d.compile&&(h.compile=function(b){var a=d.parse(b);b={data:!0,stringParams:!0};a=(new h.Compiler).compile(a,b);b=(new h.JavaScriptCompiler).compile(a,b,void 0,!0);b=h.template(b);b.isMethod=!1;return b});m["default"]=h});t("ember-handlebars",
"ember-handlebars-compiler ember-metal/core ember-runtime/system/lazy_load ember-handlebars/loader ember-handlebars/ext ember-handlebars/string ember-handlebars/helpers/shared ember-handlebars/helpers/binding ember-handlebars/helpers/collection ember-handlebars/helpers/view ember-handlebars/helpers/unbound ember-handlebars/helpers/debug ember-handlebars/helpers/each ember-handlebars/helpers/template ember-handlebars/helpers/partial ember-handlebars/helpers/yield ember-handlebars/helpers/loc ember-handlebars/controls/checkbox ember-handlebars/controls/select ember-handlebars/controls/text_area ember-handlebars/controls/text_field ember-handlebars/controls/text_support ember-handlebars/controls ember-handlebars/component_lookup ember-handlebars/views/handlebars_bound_view ember-handlebars/views/metamorph_view exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r,v,y,A,x,G,B,C,E,M){a=a["default"];m=m["default"];n=n.runLoadHooks;k=l.normalizePath;var L=l.template,H=l.makeBoundHelper,K=l.registerBoundHelper,Q=l.resolveHash,I=l.resolveParams,t=l.getEscaped,z=l.handlebarsGet,F=l.evaluateUnboundHelper,P=l.helperMissingHelper;l=l.blockHelperMissingHelper;d=d["default"];var O=h.bind,R=h._triageMustacheHelper,X=h.resolveHelper,U=h.bindHelper,Y=h.boundIfHelper,da=h.unboundIfHelper,ea=h.withHelper,V=h.ifHelper,J=h.unlessHelper,
Z=h.bindAttrHelper,D=h.bindAttrHelperDeprecated;h=h.bindClasses;c=c["default"];var W=b.ViewHelper;b=b.viewHelper;g=g["default"];var T=p.logHelper;p=p.debuggerHelper;var ca=u.EachView,$=u.GroupedEach;u=u.eachHelper;w=w["default"];s=s["default"];q=q["default"];e=e["default"];r=r["default"];var fa=v.Select,aa=v.SelectOption;v=v.SelectOptgroup;y=y["default"];A=A["default"];x=x["default"];var la=G.inputHelper;G=G.textareaHelper;B=B["default"];var ja=C._HandlebarsBoundView;C=C.SimpleHandlebarsView;var ra=
E._SimpleMetamorphView,ma=E._MetamorphView;E=E._Metamorph;a.bootstrap=f["default"];a.template=L;a.makeBoundHelper=H;a.registerBoundHelper=K;a.resolveHash=Q;a.resolveParams=I;a.resolveHelper=X;a.get=z;a.getEscaped=t;a.evaluateUnboundHelper=F;a.bind=O;a.bindClasses=h;a.EachView=ca;a.GroupedEach=$;a.resolvePaths=d;a.ViewHelper=W;a.normalizePath=k;m.Handlebars=a;m.ComponentLookup=B;m._SimpleHandlebarsView=C;m._HandlebarsBoundView=ja;m._SimpleMetamorphView=ra;m._MetamorphView=ma;m._Metamorph=E;m.TextSupport=
x;m.Checkbox=r;m.Select=fa;m.SelectOption=aa;m.SelectOptgroup=v;m.TextArea=y;m.TextField=A;m.TextSupport=x;a.registerHelper("helperMissing",P);a.registerHelper("blockHelperMissing",l);a.registerHelper("bind",U);a.registerHelper("boundIf",Y);a.registerHelper("_triageMustache",R);a.registerHelper("unboundIf",da);a.registerHelper("with",ea);a.registerHelper("if",V);a.registerHelper("unless",J);a.registerHelper("bind-attr",Z);a.registerHelper("bindAttr",D);a.registerHelper("collection",c);a.registerHelper("log",
T);a.registerHelper("debugger",p);a.registerHelper("each",u);a.registerHelper("loc",e);a.registerHelper("partial",s);a.registerHelper("template",w);a.registerHelper("yield",q);a.registerHelper("view",b);a.registerHelper("unbound",g);a.registerHelper("input",la);a.registerHelper("textarea",G);n("Ember.Handlebars",a);M["default"]=a});t("ember-handlebars/component_lookup",["ember-runtime/system/object","exports"],function(a,m){var n=a["default"].extend({lookupFactory:function(a,l){l=l||this.container;
var k="component:"+a,d="template:components/"+a,h=l&&l.has(d);h&&l.injection(k,"layout",d);d=l.lookupFactory(k);if(h||d)return d||(l.register(k,D.Component),d=l.lookupFactory(k)),d}});m["default"]=n});t("ember-handlebars/controls","ember-handlebars/controls/checkbox ember-handlebars/controls/text_field ember-handlebars/controls/text_area ember-metal/core ember-handlebars-compiler exports".split(" "),function(a,m,n,f,l,k){var d=a["default"],h=m["default"],c=n["default"],b=f["default"],g=l["default"].helpers;
k.inputHelper=function(a){b.assert("You can only pass attributes to the `input` helper, not arguments",2>arguments.length);var c=a.hash,f=c.type,s=c.on;delete c.type;delete c.on;if("checkbox"===f)return b.assert("{{input type='checkbox'}} does not support setting `value=someBooleanValue`; you must use `checked=someBooleanValue` instead.","ID"!==a.hashTypes.value),g.view.call(this,d,a);f&&(c.type=f);c.onEvent=s||"enter";return g.view.call(this,h,a)};k.textareaHelper=function(a){b.assert("You can only pass attributes to the `textarea` helper, not arguments",
2>arguments.length);return g.view.call(this,c,a)}});t("ember-handlebars/controls/checkbox",["ember-metal/property_get","ember-metal/property_set","ember-views/views/view","exports"],function(a,m,n,f){var l=a.get,k=m.set;a=n.View.extend({instrumentDisplay:'{{input type="checkbox"}}',classNames:["ember-checkbox"],tagName:"input",attributeBindings:"type checked indeterminate disabled tabindex name autofocus required form".split(" "),type:"checkbox",checked:!1,disabled:!1,indeterminate:!1,init:function(){this._super();
this.on("change",this,this._updateElementValue)},didInsertElement:function(){this._super();l(this,"element").indeterminate=!!l(this,"indeterminate")},_updateElementValue:function(){k(this,"checked",this.$().prop("checked"))}});f["default"]=a});t("ember-handlebars/controls/select","ember-handlebars-compiler ember-metal/enumerable_utils ember-metal/property_get ember-metal/property_set ember-views/views/view ember-views/views/collection_view ember-metal/utils ember-metal/is_none ember-metal/computed ember-runtime/system/native_array ember-metal/mixin ember-metal/properties exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u){var w=a["default"];a=m["default"];var s=n.get,q=f.set;n=l.View;k=k["default"];var e=d.isArray,r=h["default"],v=c.computed,y=b.A;d=g.observer;var A=p.defineProperty,x=a.indexOf,G=a.indexesOf,B=a.forEach,C=a.replace;p=n.extend({instrumentDisplay:"Ember.SelectOption",tagName:"option",attributeBindings:["value","selected"],defaultTemplate:function(b,a){a={data:a.data,hash:{}};w.helpers.bind.call(b,"view.label",a)},init:function(){this.labelPathDidChange();this.valuePathDidChange();
this._super()},selected:v(function(){var b=s(this,"content"),a=s(this,"parentView.selection");return s(this,"parentView.multiple")?a&&-1<x(a,b.valueOf()):b==a}).property("content","parentView.selection"),labelPathDidChange:d("parentView.optionLabelPath",function(){var b=s(this,"parentView.optionLabelPath");b&&A(this,"label",v(function(){return s(this,b)}).property(b))}),valuePathDidChange:d("parentView.optionValuePath",function(){var b=s(this,"parentView.optionValuePath");b&&A(this,"value",v(function(){return s(this,
b)}).property(b))})});h=k.extend({instrumentDisplay:"Ember.SelectOptgroup",tagName:"optgroup",attributeBindings:["label"],selectionBinding:"parentView.selection",multipleBinding:"parentView.multiple",optionLabelPathBinding:"parentView.optionLabelPath",optionValuePathBinding:"parentView.optionValuePath",itemViewClassBinding:"parentView.optionView"});d=n.extend({instrumentDisplay:"Ember.Select",tagName:"select",classNames:["ember-select"],defaultTemplate:D.Handlebars.template(function(b,a,e,c,g){function q(b,
a){a.buffer.push(d(e.view.call(b,"view.groupView",{hash:{content:"content",label:"label"},hashTypes:{content:"ID",label:"ID"},hashContexts:{content:b,label:b},contexts:[b],types:["ID"],data:a})))}function r(b,a){a.buffer.push(d(e.view.call(b,"view.optionView",{hash:{content:""},hashTypes:{content:"ID"},hashContexts:{content:b},contexts:[b],types:["ID"],data:a})))}this.compilerInfo=[4,">= 1.0.0"];e=this.merge(e,D.Handlebars.helpers);g=g||{};var d=this.escapeExpression,p=this;((b=e["if"].call(a,"view.prompt",
{hash:{},hashTypes:{},hashContexts:{},inverse:p.noop,fn:p.program(1,function(b,a){var c;a.buffer.push('<option value="">');((c=e._triageMustache.call(b,"view.prompt",{hash:{},hashTypes:{},hashContexts:{},contexts:[b],types:["ID"],data:a}))||0===c)&&a.buffer.push(c);a.buffer.push("</option>");return""},g),contexts:[a],types:["ID"],data:g}))||0===b)&&g.buffer.push(b);((b=e["if"].call(a,"view.optionGroupPath",{hash:{},hashTypes:{},hashContexts:{},inverse:p.program(6,function(b,a){var c;(c=e.each.call(b,
"view.content",{hash:{},hashTypes:{},hashContexts:{},inverse:p.noop,fn:p.program(7,r,a),contexts:[b],types:["ID"],data:a}))||0===c?a.buffer.push(c):a.buffer.push("")},g),fn:p.program(3,function(b,a){var c;(c=e.each.call(b,"view.groupedContent",{hash:{},hashTypes:{},hashContexts:{},inverse:p.noop,fn:p.program(4,q,a),contexts:[b],types:["ID"],data:a}))||0===c?a.buffer.push(c):a.buffer.push("")},g),contexts:[a],types:["ID"],data:g}))||0===b)&&g.buffer.push(b);return""}),attributeBindings:"multiple disabled tabindex name required autofocus form size".split(" "),
multiple:!1,disabled:!1,required:!1,content:null,selection:null,value:v(function(b,a){if(2===arguments.length)return a;var e=s(this,"optionValuePath").replace(/^content\.?/,"");return e?s(this,"selection."+e):s(this,"selection")}).property("selection"),prompt:null,optionLabelPath:"content",optionValuePath:"content",optionGroupPath:null,groupView:h,groupedContent:v(function(){var b=s(this,"optionGroupPath"),a=y(),e=s(this,"content")||[];B(e,function(e){var c=s(e,b);s(a,"lastObject.label")!==c&&a.pushObject({label:c,
content:y()});s(a,"lastObject.content").push(e)});return a}).property("optionGroupPath","content.@each"),optionView:p,_change:function(){s(this,"multiple")?this._changeMultiple():this._changeSingle()},selectionDidChange:d("selection.@each",function(){var b=s(this,"selection");s(this,"multiple")?e(b)?this._selectionDidChangeMultiple():q(this,"selection",y([b])):this._selectionDidChangeSingle()}),valueDidChange:d("value",function(){var b=s(this,"content"),a=s(this,"value"),e=s(this,"optionValuePath").replace(/^content\.?/,
""),c=e?s(this,"selection."+e):s(this,"selection");a!==c&&(b=b?b.find(function(b){return a===(e?s(b,e):b)}):null,this.set("selection",b))}),_triggerChange:function(){var b=s(this,"selection"),a=s(this,"value");r(b)||this.selectionDidChange();r(a)||this.valueDidChange();this._change()},_changeSingle:function(){var b=this.$()[0].selectedIndex,a=s(this,"content"),e=s(this,"prompt");a&&s(a,"length")&&(e&&0===b?q(this,"selection",null):(e&&(b-=1),q(this,"selection",a.objectAt(b))))},_changeMultiple:function(){var b=
this.$("option:selected"),a=s(this,"prompt")?1:0,c=s(this,"content"),g=s(this,"selection");c&&b&&(b=b.map(function(){return this.index-a}).toArray(),c=c.objectsAt(b),e(g)?C(g,0,s(g,"length"),c):q(this,"selection",c))},_selectionDidChangeSingle:function(){var b=this.get("element");if(b){var a=s(this,"content"),e=s(this,"selection"),a=a?x(a,e):-1;s(this,"prompt")&&(a+=1);b&&(b.selectedIndex=a)}},_selectionDidChangeMultiple:function(){var b=s(this,"content"),a=s(this,"selection"),e=b?G(b,a):[-1],c=s(this,
"prompt")?1:0,b=this.$("option"),g;b&&b.each(function(){g=-1<this.index?this.index-c:-1;this.selected=-1<x(e,g)})},init:function(){this._super();this.on("didInsertElement",this,this._triggerChange);this.on("change",this,this._change)}});u["default"]=d;u.Select=d;u.SelectOption=p;u.SelectOptgroup=h});t("ember-handlebars/controls/text_area",["ember-metal/property_get","ember-views/views/component","ember-handlebars/controls/text_support","ember-metal/mixin","exports"],function(a,m,n,f,l){var k=a.get;
a=f.observer;l["default"]=m["default"].extend(n["default"],{instrumentDisplay:"{{textarea}}",classNames:["ember-text-area"],tagName:"textarea",attributeBindings:"rows cols name selectionEnd selectionStart wrap".split(" "),rows:null,cols:null,_updateElementValue:a("value",function(){var a=k(this,"value"),f=this.$();f&&a!==f.val()&&f.val(a)}),init:function(){this._super();this.on("didInsertElement",this,this._updateElementValue)}})});t("ember-handlebars/controls/text_field",["ember-metal/property_get",
"ember-metal/property_set","ember-views/views/component","ember-handlebars/controls/text_support","exports"],function(a,m,n,f,l){l["default"]=n["default"].extend(f["default"],{instrumentDisplay:'{{input type="text"}}',classNames:["ember-text-field"],tagName:"input",attributeBindings:"type value size pattern name min max accept autocomplete autosave formaction formenctype formmethod formnovalidate formtarget height inputmode list multiple step width".split(" "),value:"",type:"text",size:null,pattern:null,
min:null,max:null})});t("ember-handlebars/controls/text_support",["ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-runtime/mixins/target_action_support","exports"],function(a,m,n,f,l){function k(b,a,c){var f=d(a,b),h=d(a,"onEvent"),s=d(a,"value");(h===b||"keyPress"===h&&"key-press"===b)&&a.sendAction("action",s);a.sendAction(b,s);if(f||h===b)d(a,"bubbles")||c.stopPropagation()}var d=a.get,h=m.set,c=n.Mixin.create(f["default"],{value:"",attributeBindings:"placeholder disabled maxlength tabindex readonly autofocus form selectionDirection spellcheck required title autocapitalize autocorrect".split(" "),
placeholder:null,disabled:!1,maxlength:null,init:function(){this._super();this.on("focusOut",this,this._elementValueDidChange);this.on("change",this,this._elementValueDidChange);this.on("paste",this,this._elementValueDidChange);this.on("cut",this,this._elementValueDidChange);this.on("input",this,this._elementValueDidChange);this.on("keyUp",this,this.interpretKeyEvents)},action:null,onEvent:"enter",bubbles:!1,interpretKeyEvents:function(b){var a=c.KEY_EVENTS[b.keyCode];this._elementValueDidChange();
if(a)return this[a](b)},_elementValueDidChange:function(){h(this,"value",this.$().val())},insertNewline:function(b){k("enter",this,b);k("insert-newline",this,b)},cancel:function(b){k("escape-press",this,b)},focusIn:function(b){k("focus-in",this,b)},focusOut:function(b){k("focus-out",this,b)},keyPress:function(b){k("key-press",this,b)}});c.KEY_EVENTS={13:"insertNewline",27:"cancel"};l["default"]=c});t("ember-handlebars/ext","ember-metal/core ember-runtime/system/string ember-handlebars-compiler ember-metal/property_get ember-metal/binding ember-metal/error ember-metal/mixin ember-metal/is_empty exports".split(" "),
function(a,m,n,f,l,k,d,h,c){function b(b,a,e){e=e&&e.keywords||{};var c,g;c=a.split(".",1)[0];e.hasOwnProperty(c)&&(b=e[c],g=!0,a=a===c?"":a.substr(c.length+1));return{root:b,path:a,isKeyword:g}}function g(a,e,c){c=b(a,e,c&&c.data);w.FEATURES.isEnabled("ember-handlebars-caps-lookup")?c=v(e)?r(w.lookup,e):r(c.root,c.path):(a=c.root,e=c.path,c=r(a,e),void 0===c&&(a!==w.lookup&&v(e))&&(c=r(w.lookup,e)));return c}function p(a){function e(){var g=C.call(arguments,0,-1),q=g.length,r=arguments[arguments.length-
1],d=[],p=r.data,f=p.isUnbound?C.call(r.types,1):r.types,s=r.hash,h=p.view,k=r.contexts,v=k&&k.length?k[0]:this,k="",l,x,m,y,n=G.prototype.normalizedValue;w.assert("registerBoundHelper-generated helpers do not support use with Handlebars blocks.",!r.fn);var E=s.boundOptions={};for(m in s)A.test(m)&&(E[m.slice(0,-7)]=s[m]);m=[];p.properties=[];for(l=0;l<q;++l)if(p.properties.push(g[l]),"ID"===f[l]){var L=b(v,g[l],p);d.push(L);m.push(L)}else p.isUnbound?d.push({path:g[l]}):d.push(null);if(p.isUnbound)return u(this,
a,d,r);var t=new G(null,null,!r.hash.unescaped,r.data);t.normalizedValue=function(){var e=[],c;for(c in E)E.hasOwnProperty(c)&&(y=b(v,E[c],p),t.path=y.path,t.pathRoot=y.root,s[c]=n.call(t));for(l=0;l<q;++l)(y=d[l])?(t.path=y.path,t.pathRoot=y.root,e.push(n.call(t))):e.push(g[l]);e.push(r);return a.apply(v,e)};h.appendChild(t);for(x in E)E.hasOwnProperty(x)&&m.push(b(v,E[x],p));l=0;for(x=m.length;l<x;++l)y=m[l],h.registerObserver(y.root,y.path,t,t.rerender);if(!("ID"!==f[0]||0===d.length)){x=d[0];
f=x.root;x=x.path;B(x)||(k=x+".");x=0;for(m=c.length;x<m;x++)h.registerObserver(f,k+c[x],t,t.rerender)}}G||(G=S("ember-handlebars/views/handlebars_bound_view").SimpleHandlebarsView);var c=C.call(arguments,1);e._rawFunction=a;return e}function u(b,a,e,c){var q=[],r=c.hash,d=r.boundOptions,p=C.call(c.types,1),f,s;for(f in d)d.hasOwnProperty(f)&&(r[f]=g(b,d[f],c));r=0;for(d=e.length;r<d;++r)f=e[r],s=p[r],"ID"===s?q.push(g(f.root,f.path,c)):q.push(f.path);q.push(c);return a.apply(b,q)}var w=a["default"],
s=m.fmt,q=n["default"],e=q.helpers,r=f.get,v=l.isGlobalPath,y=k["default"],A=d.IS_BINDING,x,G,B=h["default"],C=[].slice,E=q.template;c.getEscaped=function(b,a,e){b=g(b,a,e);null===b||void 0===b?b="":b instanceof Handlebars.SafeString||(b=String(b));e.hash.unescaped||(b=Handlebars.Utils.escapeExpression(b));return b};c.resolveParams=function(b,a,e){for(var c=[],r=e.types,q,d,p=0,f=a.length;p<f;p++)q=a[p],d=r[p],"ID"===d?c.push(g(b,q,e)):c.push(q);return c};c.resolveHash=function(b,a,e){var c={},q=
e.hashTypes,r,d;for(d in a)a.hasOwnProperty(d)&&(r=q[d],c[d]="ID"===r?g(b,a[d],e):a[d]);return c};c.helperMissingHelper=function(b){x||(x=S("ember-handlebars/helpers/binding").resolveHelper);var a="",e=arguments[arguments.length-1],c=x(e.data.view.container,b);if(c)return c.apply(this,C.call(arguments,1));e.data&&(a=e.data.view);throw new y(s("%@ Handlebars error: Could not find property '%@' on object %@.",[a,b,this]));};c.blockHelperMissingHelper=function(b){x||(x=S("ember-handlebars/helpers/binding").resolveHelper);
var a=arguments[arguments.length-1];w.assert("`blockHelperMissing` was invoked without a helper name, which is most likely due to a mismatch between the version of Ember.js you're running now and the one used to precompile your templates. Please make sure the version of `ember-handlebars-compiler` you're using is up to date.",b);return(a=x(a.data.view.container,b))?a.apply(this,C.call(arguments,1)):e.helperMissing.call(this,b)};c.registerBoundHelper=function(b,a){var e=C.call(arguments,1),e=p.apply(this,
e);q.registerHelper(b,e)};c.template=function(b){b=E(b);b.isTop=!0;return b};c.normalizePath=b;c.makeBoundHelper=p;c.handlebarsGet=g;c.evaluateUnboundHelper=u});t("ember-handlebars/helpers/binding","ember-metal/core ember-handlebars-compiler ember-metal/property_get ember-metal/property_set ember-metal/utils ember-runtime/system/string ember-metal/platform ember-metal/is_none ember-metal/enumerable_utils ember-metal/array ember-views/views/view ember-metal/run_loop ember-metal/observer ember-metal/binding ember-views/system/jquery ember-handlebars/ext ember-runtime/keys ember-handlebars/views/handlebars_bound_view exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r,v){function y(b){return!t(b)}function A(b,a,e,c,g,r){var q=a.data,d=a.fn,p=a.inverse,f=q.view,s,h=this||window;s=V(h,b,q);if("object"===typeof this){if(q.insideGroup){var q=function(){for(;f._contextView;)f=f._contextView;z.once(f,"rerender")},k;b=J(h,b,a);b=g?g(b):b;e=e?h:b;c(b)?k=d:p&&(k=p);k(e,{data:a.data})}else{q=da;c={preserveContext:e,shouldDisplayFunc:c,valueNormalizerFunc:g,displayTemplate:d,inverseTemplate:p,path:b,pathRoot:h,previousContext:h,
isEscaped:!a.hash.unescaped,templateData:a.data,templateHash:a.hash,helperName:a.helperName};a.isWithHelper&&(q=ca);var v=f.createChildView(q,c);f.appendChild(v);q=function(){z.scheduleOnce("render",v,"rerenderIfNeeded")}}if(""!==s.path&&(f.registerObserver(s.root,s.path,q),r))for(a=0;a<r.length;a++)f.registerObserver(s.root,s.path+"."+r[a],q)}else q.buffer.push(U(h,b,a))}function x(b,a,e){var c=e.data,g=c.view,q,r;q=V(b,a,c);if((r=q.root)&&"object"===typeof r){if(c.insideGroup)r=function(){for(;g._contextView;)g=
g._contextView;z.once(g,"rerender")},b=U(b,a,e),c.buffer.push(b);else{var d=new ea(a,b,!e.hash.unescaped,e.data);d._parentView=g;g.appendChild(d);r=function(){z.scheduleOnce("render",d,"rerender")}}""!==q.path&&g.registerObserver(q.root,q.path,r)}else b=U(b,a,e),c.buffer.push(b)}function G(b){var a=b&&M(b,"isTruthy");return"boolean"===typeof a?a:X(b)?0!==M(b,"length"):!!b}function B(b,a,e,c,g){var q=[],r,d,p,f=function(b,a,e){var c=a.path;b="this"===c?b:""===c?!0:J(b,c,e);return N._classStringForValue(c,
b,a.className,a.falsyClassName)};I.call(a.split(" "),function(a){var s,h,k=N._parsePropertyPath(a),v=k.path,l=b;""!==v&&"this"!==v&&(a=V(b,v,g.data),l=a.root,v=a.path);h=function(){r=f(b,k,g);p=c?e.$("[data-bindattr-"+c+"='"+c+"']"):e.$();!p||0===p.length?F(l,v,h):(s&&p.removeClass(s),r?(p.addClass(r),s=r):s=null)};""!==v&&"this"!==v&&e.registerObserver(l,v,h);if(d=f(b,k,g))q.push(d),s=d});return q}var C=a["default"],E=m["default"],M=n.get,L=l.apply,H=k.fmt,K=d.create,t=h["default"],I=b.forEach,N=
g.View,z=p["default"],F=u.removeObserver,P=w.isGlobalPath,O=w.bind,R=s["default"],X=l.isArray,U=q.getEscaped,Y=e["default"],da=r._HandlebarsBoundView,ea=r.SimpleHandlebarsView,V=q.normalizePath,J=q.handlebarsGet,Z=l.guidFor,D=l.typeOf,W=E.helpers,T=E.SafeString,ca=da.extend({init:function(){var b;L(this,this._super,arguments);var a=this.templateData.keywords,e=this.templateHash.keywordName,c=this.templateHash.keywordPath,g=this.templateHash.controller,q=this.preserveContext;if(g){var r=this.previousContext;
this._generatedController=b=this.container.lookupFactory("controller:"+g).create({parentController:r,target:r});q?(g=R.expando+Z(b),a[g]=b,O(a,g+".model",c),c=g):(this.set("controller",b),this.valueNormalizerFunc=function(a){b.set("model",a);return b})}q&&O(a,e,c)},willDestroy:function(){this._super();this._generatedController&&this._generatedController.destroy()}});v.bind=A;v._triageMustacheHelper=function(b,a){C.assert("You cannot pass more than one argument to the _triageMustache helper",2>=arguments.length);
var e=E.resolveHelper(a.data.view.container,b);return e?e.call(this,a):W.bind.call(this,b,a)};v.resolveHelper=function(b,a){if(W[a])return W[a];if(b&&-1!==a.indexOf("-")){var e=b.lookup("helper:"+a);if(!e){var c=b.lookup("component-lookup:main");C.assert("Could not find 'component-lookup:main' on the provided container, which is necessary for performing component lookups",c);if(c=c.lookupFactory(a,b))e=E.makeViewHelper(c),b.register("helper:"+a,e)}return e}};v.bindHelper=function(b,a){C.assert("You cannot pass more than one argument to the bind helper",
2>=arguments.length);var e=a.contexts&&a.contexts.length?a.contexts[0]:this;if(!a.fn)return x(e,b,a);a.helperName="bind";return A.call(e,b,a,!1,y)};v.boundIfHelper=function(b,a){var e=a.contexts&&a.contexts.length?a.contexts[0]:this;a.helperName=a.helperName||"boundIf";return A.call(e,b,a,!0,G,G,["isTruthy","length"])};v.unboundIfHelper=function(b,a){var e=a.contexts&&a.contexts.length?a.contexts[0]:this,c=a.data,g=a.fn,q=a.inverse,r;V(e,b,c);r=J(e,b,a);G(r)||(g=q);g(e,{data:c})};v.withHelper=function(b,
a){var e,c,g="with";if(4===arguments.length){var q;C.assert("If you pass more than one argument to the with helper, it must be in the form #with foo as bar","as"===arguments[1]);a=arguments[3];e=arguments[2];(c=arguments[0])&&(g+=" "+c+" as "+e);C.assert("You must pass a block to the with helper",a.fn&&a.fn!==Handlebars.VM.noop);var r=K(a);r.data=K(a.data);r.data.keywords=K(a.data.keywords||{});if(P(c))q=c;else{q=V(this,c,a.data);c=q.path;q=q.root;var d=R.expando+Z(q);r.data.keywords[d]=q;q=c?d+"."+
c:d}r.hash.keywordName=e;r.hash.keywordPath=q;e=this;b=c;a=r;c=!0}else C.assert("You must pass exactly one argument to the with helper",2===arguments.length),C.assert("You must pass a block to the with helper",a.fn&&a.fn!==Handlebars.VM.noop),g+=" "+b,e=a.contexts[0],c=!1;a.helperName=g;a.isWithHelper=!0;return A.call(e,b,a,c,y)};v.ifHelper=function(b,a){C.assert("You must pass exactly one argument to the if helper",2===arguments.length);C.assert("You must pass a block to the if helper",a.fn&&a.fn!==
Handlebars.VM.noop);a.helperName=a.helperName||"if "+b;return a.data.isUnbound?W.unboundIf.call(a.contexts[0],b,a):W.boundIf.call(a.contexts[0],b,a)};v.unlessHelper=function(b,a){C.assert("You must pass exactly one argument to the unless helper",2===arguments.length);C.assert("You must pass a block to the unless helper",a.fn&&a.fn!==Handlebars.VM.noop);var e=a.fn,c=a.inverse,g="unless";b&&(g+=" "+b);a.fn=c;a.inverse=e;a.helperName=a.helperName||g;return a.data.isUnbound?W.unboundIf.call(a.contexts[0],
b,a):W.boundIf.call(a.contexts[0],b,a)};v.bindAttrHelper=function(b){var a=b.hash;C.assert("You must specify at least one hash argument to bind-attr",!!Y(a).length);var e=b.data.view,c=[],g=this||window,q=++C.uuid,r=a["class"];null!=r&&(r=B(g,r,e,q,b),c.push('class="'+Handlebars.Utils.escapeExpression(r.join(" "))+'"'),delete a["class"]);r=Y(a);I.call(r,function(r){var d=a[r],p;C.assert(H("You must provide an expression as the value of bound attribute. You specified: %@=%@",[r,d]),"string"===typeof d);
p=V(g,d,b.data);var f="this"===d?p.root:J(g,d,b),s=D(f);C.assert(H("Attributes must be numbers, strings or booleans, not %@",[f]),null===f||void 0===f||"number"===s||"string"===s||"boolean"===s);"this"!==d&&!(p.isKeyword&&""===p.path)&&e.registerObserver(p.root,p.path,function ba(){var a=J(g,d,b);C.assert(H("Attributes must be numbers, strings or booleans, not %@",[a]),null===a||void 0===a||"number"===typeof a||"string"===typeof a||"boolean"===typeof a);var c=e.$("[data-bindattr-"+q+"='"+q+"']");
!c||0===c.length?F(p.root,p.path,ba):N.applyAttributeBindings(c,r,a)});"string"===s||"number"===s&&!isNaN(f)?c.push(r+'="'+Handlebars.Utils.escapeExpression(f)+'"'):f&&"boolean"===s&&c.push(r+'="'+r+'"')},this);c.push("data-bindattr-"+q+'="'+q+'"');return new T(c.join(" "))};v.bindAttrHelperDeprecated=function(){C.warn("The 'bindAttr' view helper is deprecated in favor of 'bind-attr'");return W["bind-attr"].apply(this,arguments)};v.bindClasses=B});t("ember-handlebars/helpers/collection","ember-metal/core ember-metal/utils ember-handlebars-compiler ember-runtime/system/string ember-metal/property_get ember-handlebars/ext ember-handlebars/helpers/view ember-metal/computed ember-views/views/collection_view exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b){var g=a["default"],p=n["default"],u=p.helpers,w=f.fmt,s=l.get,q=k.handlebarsGet,e=d.ViewHelper,r=c["default"],v=h.computed.alias;b["default"]=function(b,a){g.deprecate("Using the {{collection}} helper without specifying a class has been deprecated as the {{each}} helper now supports the same functionality.","collection"!==b);b&&b.data&&b.data.isRenderData?(a=b,b=void 0,g.assert("You cannot pass more than one argument to the collection helper",1===arguments.length)):g.assert("You cannot pass more than one argument to the collection helper",
2===arguments.length);var c=a.fn,d=a.data,f=a.inverse,h,k,l;b?(k=(h=d.keywords.controller)&&h.container,l=q(this,b,a)||k.lookupFactory("view:"+b),g.assert(w("%@ #collection: Could not find collection class %@",[d.view,b]),!!l)):l=r;var m=a.hash,n={},K=l.proto();m.itemView?(h=d.keywords.controller,g.assert('You specified an itemView, but the current context has no container to look the itemView up in. This probably means that you created a view manually, instead of through the container. Instead, use container.lookup("view:viewName"), which will properly instantiate your view.',
h&&h.container),k=h.container,h=k.lookupFactory("view:"+m.itemView),g.assert("You specified the itemView "+m.itemView+", but it was not found at "+k.describe("view:"+m.itemView)+" (and it was not registered in the container)",!!h)):h=m.itemViewClass?q(K,m.itemViewClass,a):K.itemViewClass;g.assert(w("%@ #collection: Could not find itemViewClass %@",[d.view,h]),!!h);delete m.itemViewClass;delete m.itemView;for(var t in m)if(m.hasOwnProperty(t)&&(k=t.match(/^item(.)(.*)$/))&&"itemController"!==t)n[k[1].toLowerCase()+
k[2]]=m[t],delete m[t];c&&(n.template=c,delete a.fn);var I;f&&f!==p.VM.noop?(I=s(K,"emptyViewClass"),I=I.extend({template:f,tagName:n.tagName})):m.emptyViewClass&&(I=q(this,m.emptyViewClass,a));I&&(m.emptyView=I);n._context=m.keyword?this:v("content");c=e.propertiesFromHTMLOptions({data:d,hash:n},this);m.itemViewClass=h.extend(c);a.helperName=a.helperName||"collection";return u.view.call(this,l,a)}});t("ember-handlebars/helpers/debug","ember-metal/core ember-metal/utils ember-metal/logger ember-metal/property_get ember-handlebars/ext exports".split(" "),
function(a,m,n,f,l,k){var d=m.inspect,h=n["default"],c=l.normalizePath,b=l.handlebarsGet,g=[].slice;k.logHelper=function(){for(var a=g.call(arguments,0,-1),d=arguments[arguments.length-1],f=h.log,s=[],q=0;q<a.length;q++)if("ID"===d.types[q]){var e=c(d.contexts&&d.contexts[q]||this,a[q],d.data);"this"===e.path?s.push(e.root):s.push(b(e.root,e.path,d))}else s.push(a[q]);f.apply(f,s)};k.debuggerHelper=function(b){d(this);debugger}});t("ember-handlebars/helpers/each","ember-metal/core ember-handlebars-compiler ember-runtime/system/string ember-metal/property_get ember-metal/property_set ember-views/views/collection_view ember-metal/binding ember-runtime/controllers/controller ember-runtime/controllers/array_controller ember-runtime/mixins/array ember-runtime/copy ember-metal/run_loop ember-metal/events ember-handlebars/ext ember-metal/computed ember-metal/observer ember-handlebars/views/metamorph_view exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r){function v(){R.reopen({_checkMetamorph:I("didInsertElement",function(){y.assert("The metamorph tags, "+this.morph.start+" and "+this.morph.end+", have different parents.\nThe browser has fixed your template to output valid HTML (for example, check that you have properly closed all tags and have used a TBODY tag when creating a table with '{{#each}}')",document.getElementById(this.morph.start).parentNode===document.getElementById(this.morph.end).parentNode)})})}
var y=a["default"];a=y.K;var A=m["default"],x=A.helpers,G=n.fmt,B=f.get,C=l.set,E=d.Binding,M=h.ControllerMixin,L=c["default"],H=b["default"],K=g["default"],t=p["default"],I=u.on,N=w.handlebarsGet,z=q.addObserver,F=q.removeObserver,P=q.addBeforeObserver,O=q.removeBeforeObserver;m=e._MetamorphView;var R=k["default"].extend(e._Metamorph,{init:function(){var b=B(this,"itemController"),a;if(b){var e=B(this,"controller.container").lookupFactory("controller:array").create({_isVirtual:!0,parentController:B(this,
"controller"),itemController:b,target:B(this,"controller"),_eachView:this});this.disableContentObservers(function(){C(this,"content",e);a=(new E("content","_eachView.dataSource")).oneWay();a.connect(e)});C(this,"_arrayController",e)}else this.disableContentObservers(function(){a=(new E("content","dataSource")).oneWay();a.connect(this)});return this._super()},_assertArrayLike:function(b){y.assert(G("The value that #each loops over must be an Array. You passed %@, but it should have been an ArrayController",
[b.constructor]),!M.detect(b)||b&&b.isGenerated||b instanceof L);y.assert(G("The value that #each loops over must be an Array. You passed %@",[M.detect(b)&&void 0!==b.get("model")?G("'%@' (wrapped in %@)",[b.get("model"),b]):b]),H.detect(b))},disableContentObservers:function(b){O(this,"content",null,"_contentWillChange");F(this,"content",null,"_contentDidChange");b.call(this);P(this,"content",null,"_contentWillChange");z(this,"content",null,"_contentDidChange")},itemViewClass:m,emptyViewClass:m,createChildView:function(b,
a){b=this._super(b,a);var e=B(this,"keyword"),c=B(b,"content");if(e){var g=B(b,"templateData"),g=K(g);g.keywords=b.cloneKeywords();C(b,"templateData",g);g.keywords[e]=c}c&&c.isController&&C(b,"controller",c);return b},destroy:function(){if(this._super()){var b=B(this,"_arrayController");b&&b.destroy();return this}}});(function(b){b()})(function(){v()});var X=A.GroupedEach=function(b,a,e){var c=this,g=A.normalizePath(b,a,e.data);this.context=b;this.path=a;this.options=e;this.template=e.fn;this.containingView=
e.data.view;this.normalizedRoot=g.root;this.normalizedPath=g.path;this.content=this.lookupContent();this.addContentObservers();this.addArrayObservers();this.containingView.on("willClearRender",function(){c.destroy()})};X.prototype={contentWillChange:function(){this.removeArrayObservers()},contentDidChange:function(){this.content=this.lookupContent();this.addArrayObservers();this.rerenderContainingView()},contentArrayWillChange:a,contentArrayDidChange:function(){this.rerenderContainingView()},lookupContent:function(){return N(this.normalizedRoot,
this.normalizedPath,this.options)},addArrayObservers:function(){this.content&&this.content.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},removeArrayObservers:function(){this.content&&this.content.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},addContentObservers:function(){P(this.normalizedRoot,this.normalizedPath,this,this.contentWillChange);z(this.normalizedRoot,this.normalizedPath,this,this.contentDidChange)},
removeContentObservers:function(){O(this.normalizedRoot,this.normalizedPath,this.contentWillChange);F(this.normalizedRoot,this.normalizedPath,this.contentDidChange)},render:function(){if(this.content){var b=this.content,a=B(b,"length"),e=this.options,c=e.data,g=this.template;c.insideEach=!0;for(var r=0;r<a;r++){var q=b.objectAt(r);e.data.keywords[e.hash.keyword]=q;g(q,{data:c})}}},rerenderContainingView:function(){var b=this;t.scheduleOnce("render",this,function(){b.destroyed||b.containingView.rerender()})},
destroy:function(){this.removeContentObservers();this.content&&this.removeArrayObservers();this.destroyed=!0}};r.EachView=R;r.GroupedEach=X;r.eachHelper=function(b,a){var e,c="each";4===arguments.length?(y.assert("If you pass more than one argument to the each helper, it must be in the form #each foo in bar","in"===arguments[1]),e=arguments[0],a=arguments[3],b=arguments[2],c+=" "+e+" in "+b,""===b&&(b="this"),a.hash.keyword=e):1===arguments.length?(a=b,b="this"):c+=" "+b;a.hash.dataSourceBinding=
b;e=this||window;a.helperName=a.helperName||c;if(a.data.insideGroup&&!a.hash.groupedRows&&!a.hash.itemViewClass)(new X(e,b,a)).render();else return x.collection.call(e,"Ember.Handlebars.EachView",a)}});t("ember-handlebars/helpers/loc",["ember-runtime/system/string","exports"],function(a,m){var n=a.loc;m["default"]=function(a){return n(a)}});t("ember-handlebars/helpers/partial",["ember-metal/core","ember-metal/is_none","ember-handlebars/ext","ember-handlebars/helpers/binding","exports"],function(a,
m,n,f,l){function k(b){return!c(b)}function d(b,a,c){var g=a.split("/");g[g.length-1]="_"+g[g.length-1];var q=c.data.view,g=g.join("/"),g=q.templateForName(g),q=!g&&q.templateForName(a);h.assert("Unable to find partial with name '"+a+"'.",g||q);(g||q)(b,{data:c.data})}var h=a["default"],c=m.isNone,b=n.handlebarsGet,g=f.bind;l["default"]=function(a,c){var f=c.contexts&&c.contexts.length?c.contexts[0]:this;c.helperName=c.helperName||"partial";if("ID"===c.types[0])return c.fn=function(c,g){var e=b(c,
a,g);d(c,e,g)},g.call(f,a,c,!0,k);d(f,a,c)}});t("ember-handlebars/helpers/shared",["ember-handlebars/ext","exports"],function(a,m){var n=a.handlebarsGet;m["default"]=function(a){var l=[],k=a.contexts,d=a.roots;a=a.data;for(var h=0,c=k.length;h<c;h++)l.push(n(d[h],k[h],{data:a}));return l}});t("ember-handlebars/helpers/template",["ember-metal/core","ember-handlebars-compiler","exports"],function(a,m,n){var f=a["default"],l=m["default"].helpers;n["default"]=function(a,d){f.deprecate("The `template` helper has been deprecated in favor of the `partial` helper. Please use `partial` instead, which will work the same way.");
d.helperName=d.helperName||"template";return l.partial.apply(this,arguments)}});t("ember-handlebars/helpers/unbound",["ember-handlebars-compiler","ember-handlebars/helpers/binding","ember-handlebars/ext","exports"],function(a,m,n,f){var l=a["default"].helpers,k=m.resolveHelper,d=n.handlebarsGet,h=[].slice;f["default"]=function(a,b){var g=arguments[arguments.length-1],f=g.data.view.container;return 2<arguments.length?(g.data.isUnbound=!0,f=k(f,a)||l.helperMissing,f=f.apply(this,h.call(arguments,1)),
delete g.data.isUnbound,f):d(b.contexts&&b.contexts.length?b.contexts[0]:this,a,b)}});t("ember-handlebars/helpers/view","ember-metal/core ember-runtime/system/object ember-metal/property_get ember-metal/property_set ember-metal/mixin ember-views/system/jquery ember-views/views/view ember-metal/binding ember-handlebars/ext ember-runtime/system/string exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g){var p=a["default"],u=n.get,w=l.IS_BINDING,s=k["default"],q=d.View,e=h.isGlobalPath,r=c.normalizePath,
v=c.handlebarsGet,y=b["default"],A=/^[a-z]/,x=/^view\./,G=m["default"].create({propertiesFromHTMLOptions:function(b){var a=b.hash;b=b.data;var e={},c=a["class"],g=!1;a.id&&(e.elementId=a.id,g=!0);a.tag&&(e.tagName=a.tag,g=!0);c&&(c=c.split(" "),e.classNames=c,g=!0);a.classBinding&&(e.classNameBindings=a.classBinding.split(" "),g=!0);a.classNameBindings&&(void 0===e.classNameBindings&&(e.classNameBindings=[]),e.classNameBindings=e.classNameBindings.concat(a.classNameBindings.split(" ")),g=!0);a.attributeBindings&&
(p.assert("Setting 'attributeBindings' via Handlebars is not allowed. Please subclass Ember.View and set it there instead."),e.attributeBindings=null,g=!0);g&&(a=s.extend({},a),delete a.id,delete a.tag,delete a["class"],delete a.classBinding);for(var r in a)a.hasOwnProperty(r)&&w.test(r)&&"string"===typeof a[r]&&(c=this.contextualizeBindingPath(a[r],b))&&(a[r]=c);if(e.classNameBindings)for(var d in e.classNameBindings)r=e.classNameBindings[d],"string"===typeof r&&(r=q._parsePropertyPath(r),(c=this.contextualizeBindingPath(r.path,
b))&&(e.classNameBindings[d]=c+r.classNames));return s.extend(a,e)},contextualizeBindingPath:function(b,a){return r(null,b,a).isKeyword?"templateData.keywords."+b:e(b)?null:"this"===b||""===b?"_parentView.context":"_parentView.context."+b},helper:function(b,a,e){var c=e.data,g=e.fn,r,d=e.hash,f=e.hashTypes,s;for(s in d)if("ID"===f[s]){var h=d[s];w.test(s)?p.warn("You're attempting to render a view by passing "+s+"="+h+" to a view helper, but this syntax is ambiguous. You should either surround "+
h+" in quotes or remove `Binding` from "+s+"."):(d[s+"Binding"]=h,f[s+"Binding"]="STRING",delete d[s],delete f[s])}d.hasOwnProperty("idBinding")&&(d.id=v(b,d.idBinding,e),f.id="STRING",delete d.idBinding,delete f.idBinding);if("string"===typeof a){var k;"STRING"===e.types[0]&&A.test(a)&&!x.test(a)?k=a:(r=v(b,a,e),"string"===typeof r&&(k=r));k&&(p.assert("View requires a container",!!c.view.container),r=c.view.container.lookupFactory("view:"+k));p.assert("Unable to find view at path '"+a+"'",!!r)}else r=
a;p.assert(y.fmt("You must pass a view to the #view helper, not %@ (%@)",[a,r]),q.detect(r)||q.detectInstance(r));a=this.propertiesFromHTMLOptions(e,b);d=c.view;a.templateData=c;c=r.proto?r.proto():r;g&&(p.assert("You cannot provide a template block if you also specified a templateName",!u(a,"templateName")&&!u(c,"templateName")),a.template=g);!c.controller&&(!c.controllerBinding&&!a.controller&&!a.controllerBinding)&&(a._context=b);e.helperName&&(a.helperName=e.helperName);d.appendChild(r,a)}});
g.ViewHelper=G;g.viewHelper=function(b,a){p.assert("The view helper only takes a single argument",2>=arguments.length);b&&(b.data&&b.data.isRenderData)&&(a=b,p.assert("{{view}} helper requires parent view to have a container but none was found. This usually happens when you are manually-managing views.",!!a.data.view.container),b=a.data.view.container.lookupFactory("view:default"));a.helperName=a.helperName||"view";return G.helper(this,b,a)}});t("ember-handlebars/helpers/yield",["ember-metal/core",
"ember-metal/property_get","exports"],function(a,m,n){var f=a["default"],l=m.get;n["default"]=function(a){for(var d=a.data.view;d&&!l(d,"layout");)d=d._contextView?d._contextView:l(d,"_parentView");f.assert("You called yield in a template that was not a layout",!!d);d._yield(this,a)}});t("ember-handlebars/loader","ember-handlebars/component_lookup ember-views/system/jquery ember-metal/error ember-runtime/system/lazy_load ember-handlebars-compiler exports".split(" "),function(a,m,n,f,l,k){function d(b){g('script[type="text/x-handlebars"], script[type="text/x-raw-handlebars"]',
b).each(function(){var b=g(this),a="text/x-raw-handlebars"===b.attr("type")?g.proxy(Handlebars.compile,Handlebars):g.proxy(u.compile,u),e=b.attr("data-template-name")||b.attr("id")||"application",a=a(b.html());if(void 0!==D.TEMPLATES[e])throw new p('Template named "'+e+'" already exists.');D.TEMPLATES[e]=a;b.remove()})}function h(){d(g(document))}function c(a){a.register("component-lookup:main",b)}var b=a["default"],g=m["default"],p=n["default"];a=f.onLoad;var u=l["default"];a("Ember.Application",
function(b){b.initializer({name:"domTemplates",initialize:h});b.initializer({name:"registerComponentLookup",after:"domTemplates",initialize:c})});k["default"]=d});t("ember-handlebars/string",["ember-runtime/system/string","exports"],function(a,m){function n(a){return new Handlebars.SafeString(a)}a["default"].htmlSafe=n;if(!0===D.EXTEND_PROTOTYPES||D.EXTEND_PROTOTYPES.String)String.prototype.htmlSafe=function(){return n(this)};m["default"]=n});t("ember-handlebars/views/handlebars_bound_view","ember-handlebars-compiler ember-metal/core ember-metal/error ember-metal/property_get ember-metal/property_set ember-metal/merge ember-metal/run_loop ember-metal/computed ember-views/views/view ember-views/views/states ember-handlebars/views/metamorph_view ember-handlebars/ext exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u){function w(b,a,e,c){this.path=b;this.pathRoot=a;this.isEscaped=e;this.templateData=c;this.morph=q();this.state="preRender";this.buffer=this._parentView=this.updateId=null}var s=a["default"].SafeString;a=m["default"].K;var q=S("metamorph"),e=n["default"],r=f.get,v=l.set;n=k["default"];var y=d["default"];d=b.cloneStates;b=b.states;g=g._MetamorphView;var A=p.handlebarsGet;w.prototype={isVirtual:!0,isView:!0,destroy:function(){this.updateId&&(y.cancel(this.updateId),
this.updateId=null);this._parentView&&this._parentView.removeChild(this);this.morph=null;this.state="destroyed"},propertyWillChange:a,propertyDidChange:a,normalizedValue:function(){var b=this.path,a=this.pathRoot,e;""===b?b=a:(e=this.templateData,b=A(a,b,{data:e}));return b},renderToBuffer:function(b){var a;a=""+this.morph.startTag();a+=this.render();a+=this.morph.endTag();b.push(a)},render:function(){var b=this.isEscaped,a=this.normalizedValue();null===a||void 0===a?a="":a instanceof s||(a=String(a));
b&&(a=Handlebars.Utils.escapeExpression(a));return a},rerender:function(){switch(this.state){case "inBuffer":throw new e("Something you did tried to replace an {{expression}} before it was inserted into the DOM.");case "hasElement":case "inDOM":this.updateId=y.scheduleOnce("render",this,"update")}return this},update:function(){this.updateId=null;this.morph.html(this.render())},transitionTo:function(b){this.state=b}};b=d(b);n(b._default,{rerenderIfNeeded:a});n(b.inDOM,{rerenderIfNeeded:function(b){b.normalizedValue()!==
b._lastNormalizedValue&&b.rerender()}});p=g.extend({instrumentName:"boundHandlebars",_states:b,shouldDisplayFunc:null,preserveContext:!1,previousContext:null,displayTemplate:null,inverseTemplate:null,path:null,pathRoot:null,normalizedValue:function(){var b=r(this,"path"),a=r(this,"pathRoot"),e=r(this,"valueNormalizerFunc"),c;""===b?b=a:(c=r(this,"templateData"),b=A(a,b,{data:c}));return e?e(b):b},rerenderIfNeeded:function(){this.currentState.rerenderIfNeeded(this)},render:function(b){var a=r(this,
"isEscaped"),e=r(this,"shouldDisplayFunc"),c=r(this,"preserveContext"),g=r(this,"previousContext"),d=r(this,"inverseTemplate"),q=r(this,"displayTemplate"),f=this.normalizedValue();this._lastNormalizedValue=f;if(e(f))if(v(this,"template",q),c)v(this,"_context",g);else if(q)v(this,"_context",f);else{null===f||void 0===f?f="":f instanceof s||(f=String(f));a&&(f=Handlebars.Utils.escapeExpression(f));b.push(f);return}else d?(v(this,"template",d),c?v(this,"_context",g):v(this,"_context",f)):v(this,"template",
function(){return""});return this._super(b)}});u._HandlebarsBoundView=p;u.SimpleHandlebarsView=w});t("ember-handlebars/views/metamorph_view","ember-metal/core ember-metal/property_get ember-metal/property_set ember-views/views/view ember-metal/mixin ember-metal/run_loop exports".split(" "),function(a,m,n,f,l,k,d){function h(){g.once(b,"notifyMutationListeners")}var c=a["default"];a=f.CoreView;var b=f.View;f=l.Mixin;var g=k["default"],p=S("metamorph");k=f.create({isVirtual:!0,tagName:"",instrumentName:"metamorph",
init:function(){this._super();this.morph=p();c.deprecate("Supplying a tagName to Metamorph views is unreliable and is deprecated. You may be setting the tagName on a Handlebars helper that creates a Metamorph.",!this.tagName)},beforeRender:function(b){b.push(this.morph.startTag());b.pushOpeningTag()},afterRender:function(b){b.pushClosingTag();b.push(this.morph.endTag())},createElement:function(){this.outerHTML=this.renderToBuffer().string();this.clearBuffer()},domManager:{remove:function(b){b.morph.remove();
h()},prepend:function(b,a){b.morph.prepend(a);h()},after:function(b,a){b.morph.after(a);h()},html:function(b,a){b.morph.html(a);h()},replace:function(b){var a=b.morph;b.transitionTo("preRender");g.schedule("render",this,function(){if(!b.isDestroying){b.clearRenderedChildren();var c=b.renderToBuffer();b.invokeRecursively(function(b){b.propertyWillChange("element")});b.triggerRecursively("willInsertElement");a.replaceWith(c.string());b.transitionTo("inDOM");b.invokeRecursively(function(b){b.propertyDidChange("element")});
b.triggerRecursively("didInsertElement");h()}})},empty:function(b){b.morph.html("");h()}}});d._Metamorph=k;f=b.extend(k);d._MetamorphView=f;k=a.extend(k);d._SimpleMetamorphView=k});t("ember-metal","ember-metal/core ember-metal/merge ember-metal/instrumentation ember-metal/utils ember-metal/error ember-metal/enumerable_utils ember-metal/platform ember-metal/array ember-metal/logger ember-metal/property_get ember-metal/events ember-metal/observer_set ember-metal/property_events ember-metal/properties ember-metal/property_set ember-metal/map ember-metal/get_properties ember-metal/set_properties ember-metal/watch_key ember-metal/chains ember-metal/watch_path ember-metal/watching ember-metal/expand_properties ember-metal/computed ember-metal/observer ember-metal/mixin ember-metal/binding ember-metal/run_loop ember-metal/libraries ember-metal/is_none ember-metal/is_empty ember-metal/is_blank exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r,v,y,A,x,G,B,C,E,M,L,H,K,t,I,N){var z=a["default"],F=m["default"],P=n.instrument,O=n.subscribe,R=n.unsubscribe,X=n.reset,U=f.generateGuid,Y=f.GUID_KEY,da=f.GUID_PREFIX,ea=f.guidFor,V=f.META_DESC,J=f.EMPTY_META,Z=f.meta,D=f.getMeta,W=f.setMeta,T=f.metaPath,ca=f.inspect,$=f.typeOf,fa=f.tryCatchFinally,aa=f.isArray,la=f.makeArray,ja=f.canInvoke,ra=f.tryInvoke,ma=f.tryFinally,sa=f.wrap,ta=f.apply,ha=f.applyStr,oa=l["default"],ua=k["default"],pa=d.create,ba=
d.platform,qa=h.map,xa=h.forEach,ya=h.filter,za=h.indexOf,Aa=c["default"],Ba=b.get,Ca=b.getWithDefault,Da=b.normalizeTuple,ia=b._getPath,ka=g.on,Ea=g.addListener,Fa=g.removeListener,Ga=g.suspendListener,Ha=g.suspendListeners,Ia=g.sendEvent,Ja=g.hasListeners,Ka=g.watchedEvents,La=g.listenersFor,Ma=g.listenersDiff,Na=g.listenersUnion,Oa=p["default"],Pa=u.propertyWillChange,Qa=u.propertyDidChange,Ra=u.overrideChains,Sa=u.beginPropertyChanges,Ta=u.endPropertyChanges,Ua=u.changeProperties,Va=w.Descriptor,
Wa=w.defineProperty,Xa=s.set,Ya=s.trySet,Za=q.OrderedSet,$a=q.Map,ab=q.MapWithDefault,bb=e["default"],cb=r["default"],db=v.watchKey,eb=v.unwatchKey,ga=y.flushPendingChains,fb=y.removeChainWatcher,gb=y.ChainNode,hb=y.finishChains,ib=A.watchPath,jb=A.unwatchPath,kb=x.watch,lb=x.isWatching,mb=x.unwatch,nb=x.rewatch,ob=x.destroy,pb=G["default"],qb=B.ComputedProperty,rb=B.computed,sb=B.cacheFor,tb=C.addObserver,ub=C.observersFor,vb=C.removeObserver,wb=C.addBeforeObserver,xb=C._suspendBeforeObserver,yb=
C._suspendObserver,zb=C._suspendBeforeObservers,Ab=C._suspendObservers,Bb=C.beforeObserversFor,Cb=C.removeBeforeObserver,Db=E.IS_BINDING,Eb=E.mixin,Fb=E.Mixin,Gb=E.required,Hb=E.aliasMethod,Ib=E.observer,Jb=E.immediateObserver,Kb=E.beforeObserver,Lb=M.Binding,Mb=M.isGlobalPath,Nb=M.bind,Ob=M.oneWay,Pb=L["default"],Qb=H["default"],Rb=K.isNone,Sb=K.none,Tb=t.isEmpty,Ub=t.empty,Vb=I["default"],va=z.Instrumentation={};va.instrument=P;va.subscribe=O;va.unsubscribe=R;va.reset=X;z.instrument=P;z.subscribe=
O;z.generateGuid=U;z.GUID_KEY=Y;z.GUID_PREFIX=da;z.create=pa;z.platform=ba;var wa=z.ArrayPolyfills={};wa.map=qa;wa.forEach=xa;wa.filter=ya;wa.indexOf=za;z.Error=oa;z.guidFor=ea;z.META_DESC=V;z.EMPTY_META=J;z.meta=Z;z.getMeta=D;z.setMeta=W;z.metaPath=T;z.inspect=ca;z.typeOf=$;z.tryCatchFinally=fa;z.isArray=aa;z.makeArray=la;z.canInvoke=ja;z.tryInvoke=ra;z.tryFinally=ma;z.wrap=sa;z.apply=ta;z.applyStr=ha;z.Logger=Aa;z.get=Ba;z.getWithDefault=Ca;z.normalizeTuple=Da;z._getPath=ia;z.EnumerableUtils=ua;
z.on=ka;z.addListener=Ea;z.removeListener=Fa;z._suspendListener=Ga;z._suspendListeners=Ha;z.sendEvent=Ia;z.hasListeners=Ja;z.watchedEvents=Ka;z.listenersFor=La;z.listenersDiff=Ma;z.listenersUnion=Na;z._ObserverSet=Oa;z.propertyWillChange=Pa;z.propertyDidChange=Qa;z.overrideChains=Ra;z.beginPropertyChanges=Sa;z.endPropertyChanges=Ta;z.changeProperties=Ua;z.Descriptor=Va;z.defineProperty=Wa;z.set=Xa;z.trySet=Ya;z.OrderedSet=Za;z.Map=$a;z.MapWithDefault=ab;z.getProperties=bb;z.setProperties=cb;z.watchKey=
db;z.unwatchKey=eb;z.flushPendingChains=ga;z.removeChainWatcher=fb;z._ChainNode=gb;z.finishChains=hb;z.watchPath=ib;z.unwatchPath=jb;z.watch=kb;z.isWatching=lb;z.unwatch=mb;z.rewatch=nb;z.destroy=ob;z.expandProperties=pb;z.ComputedProperty=qb;z.computed=rb;z.cacheFor=sb;z.addObserver=tb;z.observersFor=ub;z.removeObserver=vb;z.addBeforeObserver=wb;z._suspendBeforeObserver=xb;z._suspendBeforeObservers=zb;z._suspendObserver=yb;z._suspendObservers=Ab;z.beforeObserversFor=Bb;z.removeBeforeObserver=Cb;
z.IS_BINDING=Db;z.required=Gb;z.aliasMethod=Hb;z.observer=Ib;z.immediateObserver=Jb;z.beforeObserver=Kb;z.mixin=Eb;z.Mixin=Fb;z.oneWay=Ob;z.bind=Nb;z.Binding=Lb;z.isGlobalPath=Mb;z.run=Pb;z.libraries=Qb;z.libraries.registerCoreLibrary("Ember",z.VERSION);z.isNone=Rb;z.none=Sb;z.isEmpty=Tb;z.empty=Ub;z.isBlank=Vb;z.merge=F;z.onerror=null;z.__loader.registry["ember-debug"]&&S("ember-debug");N["default"]=z});t("ember-metal/array",["exports"],function(a){var m=Array.prototype,n=function(a){return a&&-1<
Function.prototype.toString.call(a).indexOf("[native code]")},f=n(m.map)?m.map:function(a,f){if(void 0===this||null===this)throw new TypeError;var c=Object(this),b=c.length>>>0;if("function"!==typeof a)throw new TypeError;for(var g=Array(b),p=0;p<b;p++)p in c&&(g[p]=a.call(f,c[p],p,c));return g},l=n(m.forEach)?m.forEach:function(a,f){if(void 0===this||null===this)throw new TypeError;var c=Object(this),b=c.length>>>0;if("function"!==typeof a)throw new TypeError;for(var g=0;g<b;g++)g in c&&a.call(f,
c[g],g,c)},k=n(m.indexOf)?m.indexOf:function(a,f){null===f||void 0===f?f=0:0>f&&(f=Math.max(0,this.length+f));for(var c=f,b=this.length;c<b;c++)if(this[c]===a)return c;return-1},n=n(m.filter)?m.filter:function(a,f){var c,b,g=[],p=this.length;for(c=0;c<p;c++)this.hasOwnProperty(c)&&(b=this[c],a.call(f,b,c,this)&&g.push(b));return g};D.SHIM_ES5&&(m.map||(m.map=f),m.forEach||(m.forEach=l),m.filter||(m.filter=n),m.indexOf||(m.indexOf=k));a.map=f;a.forEach=l;a.filter=n;a.indexOf=k});t("ember-metal/binding",
"ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/map ember-metal/observer ember-metal/run_loop exports".split(" "),function(a,m,n,f,l,k,d,h){function c(b){return v.test(b)}var b=a["default"],g=m.get,p=n.trySet,u=f.guidFor,w=l.Map,s=k.addObserver,q=k.removeObserver,e=k._suspendObserver,r=d["default"];b.LOG_BINDINGS=!!b.ENV.LOG_BINDINGS;var v=/^([A-Z$]|([0-9][A-Z$]))/,y=function(b,a){this._direction="fwd";this._from=a;this._to=b;this._directionMap=w.create()};
y.prototype={copy:function(){var b=new y(this._to,this._from);this._oneWay&&(b._oneWay=!0);return b},from:function(b){this._from=b;return this},to:function(b){this._to=b;return this},oneWay:function(){this._oneWay=!0;return this},toString:function(){var b=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+u(this)+">("+this._from+" -> "+this._to+")"+b},connect:function(a){b.assert("Must pass a valid object to Ember.Binding.connect()",!!a);var e=this._from,r=this._to;p(a,r,g(c(e)?b.lookup:a,e));s(a,
e,this,this.fromDidChange);this._oneWay||s(a,r,this,this.toDidChange);this._readyToSync=!0;return this},disconnect:function(a){b.assert("Must pass a valid object to Ember.Binding.disconnect()",!!a);var e=!this._oneWay;q(a,this._from,this,this.fromDidChange);e&&q(a,this._to,this,this.toDidChange);this._readyToSync=!1;return this},fromDidChange:function(b){this._scheduleSync(b,"fwd")},toDidChange:function(b){this._scheduleSync(b,"back")},_scheduleSync:function(b,a){var e=this._directionMap,c=e.get(b);
c||(r.schedule("sync",this,this._sync,b),e.set(b,a));"back"===c&&"fwd"===a&&e.set(b,"fwd")},_sync:function(a){var r=b.LOG_BINDINGS;if(!a.isDestroyed&&this._readyToSync){var q=this._directionMap,d=q.get(a),f=this._from,s=this._to;q.remove(a);if("fwd"===d){var h=g(c(this._from)?b.lookup:a,this._from);r&&b.Logger.log(" ",this.toString(),"->",h,a);this._oneWay?p(a,s,h):e(a,s,this,this.toDidChange,function(){p(a,s,h)})}else if("back"===d){var k=g(a,this._to);r&&b.Logger.log(" ",this.toString(),"<-",k,
a);e(a,f,this,this.fromDidChange,function(){p(c(f)?b.lookup:a,f,k)})}}}};(function(b,a){for(var e in a)a.hasOwnProperty(e)&&(b[e]=a[e])})(y,{from:function(){var b=new this;return b.from.apply(b,arguments)},to:function(){var b=new this;return b.to.apply(b,arguments)},oneWay:function(b,a){return(new this(null,b)).oneWay(a)}});h.bind=function(b,a,e){return(new y(a,e)).connect(b)};h.oneWay=function(b,a,e){return(new y(a,e)).oneWay().connect(b)};h.Binding=y;h.isGlobalPath=c});t("ember-metal/chains","ember-metal/core ember-metal/property_get ember-metal/utils ember-metal/array ember-metal/watch_key exports".split(" "),
function(a,m,n,f,l,k){function d(b,a,e){if(b&&"object"===typeof b){var c=q(b),g=c.chainWatchers;c.hasOwnProperty("chainWatchers")||(g=c.chainWatchers={});g[a]||(g[a]=[]);g[a].push(e);w(b,a,c)}}function h(b,a,e){if(b&&"object"===typeof b){var c=b[p];if(!c||c.hasOwnProperty("chainWatchers")){var g=c&&c.chainWatchers;if(g&&g[a])for(var g=g[a],r=0,q=g.length;r<q;r++)if(g[r]===e){g.splice(r,1);break}s(b,a,c)}}}function c(b,a,e){this._parent=b;this._key=a;this._watching=void 0===e;this._value=e;this._paths=
{};this._watching&&(this._object=b.value())&&d(this._object,this._key,this);this._parent&&"@each"===this._parent._key&&this.value()}var b=m.get,g=m.normalizeTuple,p=n.META_KEY,u=f.forEach,w=l.watchKey,s=l.unwatchKey,q=n.meta,e=a["default"].warn,r=/^([^\.]+)/,v=[];k.flushPendingChains=function(){if(0!==v.length){var b=v;v=[];u.call(b,function(b){b[0].add(b[1])});e("Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos",0===v.length)}};
a=c.prototype;a.value=function(){if(void 0===this._value&&this._watching){var a;a:{a=this._parent.value();var e=this._key;if(a){var c=a[p];if(!(c&&c.proto===a)){if("@each"===e){a=b(a,e);break a}var g=c&&c.descs[e];if(g&&g._cacheable){if(e in c.cache){a=c.cache[e];break a}}else{a=b(a,e);break a}}}a=void 0}this._value=a}return this._value};a.destroy=function(){if(this._watching){var b=this._object;b&&h(b,this._key,this);this._watching=!1}};a.copy=function(b){b=new c(null,null,b);var a=this._paths,e;
for(e in a)0>=a[e]||b.add(e);return b};a.add=function(b){var a,e,c;e=this._paths;e[b]=(e[b]||0)+1;a=this.value();e=g(a,b);if(e[0]&&e[0]===a)b=e[1],a=b.match(r)[0],b=b.slice(a.length+1);else if(e[0])c=e[0],a=b.slice(0,0-(e[1].length+1)),b=e[1];else{v.push([this,b]);e.length=0;return}e.length=0;this.chain(a,b,c)};a.remove=function(b){var a,e;e=this._paths;0<e[b]&&e[b]--;a=this.value();e=g(a,b);e[0]===a?(b=e[1],a=b.match(r)[0],b=b.slice(a.length+1)):(a=b.slice(0,0-(e[1].length+1)),b=e[1]);e.length=0;
this.unchain(a,b)};a.count=0;a.chain=function(b,a,e){var g=this._chains,q;g||(g=this._chains={});(q=g[b])||(q=g[b]=new c(this,b,e));q.count++;a&&(b=a.match(r)[0],a=a.slice(b.length+1),q.chain(b,a))};a.unchain=function(b,a){var e=this._chains,c=e[b];a&&1<a.length&&(b=a.match(r)[0],a=a.slice(b.length+1),c.unchain(b,a));c.count--;0>=c.count&&(delete e[c._key],c.destroy())};a.willChange=function(b){var a=this._chains;if(a)for(var e in a)a.hasOwnProperty(e)&&a[e].willChange(b);this._parent&&this._parent.chainWillChange(this,
this._key,1,b)};a.chainWillChange=function(b,a,e,c){this._key&&(a=this._key+"."+a);this._parent?this._parent.chainWillChange(this,a,e+1,c):(1<e&&c.push(this.value(),a),a="this."+a,0<this._paths[a]&&c.push(this.value(),a))};a.chainDidChange=function(b,a,e,c){this._key&&(a=this._key+"."+a);this._parent?this._parent.chainDidChange(this,a,e+1,c):(1<e&&c.push(this.value(),a),a="this."+a,0<this._paths[a]&&c.push(this.value(),a))};a.didChange=function(b){if(this._watching){var a=this._parent.value();a!==
this._object&&(h(this._object,this._key,this),this._object=a,d(a,this._key,this));this._value=void 0;this._parent&&"@each"===this._parent._key&&this.value()}if(a=this._chains)for(var e in a)a.hasOwnProperty(e)&&a[e].didChange(b);null!==b&&this._parent&&this._parent.chainDidChange(this,this._key,1,b)};k.finishChains=function(b){var a=b[p];if(a=a&&a.chains)a.value()!==b?q(b).chains=a.copy(b):a.didChange(null)};k.removeChainWatcher=h;k.ChainNode=c});t("ember-metal/computed","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/enumerable_utils ember-metal/platform ember-metal/watching ember-metal/expand_properties ember-metal/error ember-metal/properties ember-metal/property_events ember-metal/is_empty ember-metal/is_none exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w){function s(){}function q(b,a){var e=b[a];e?b.hasOwnProperty(a)||(e=b[a]=Y(e)):e=b[a]={};return e}function e(b,a,e,c){b=b._dependentKeys;var g,r,d,f,p;if(b){g=q(c,"deps");r=0;for(d=b.length;r<d;r++)f=b[r],p=q(g,f),p[e]=(p[e]||0)+1,t(a,f,c)}}function r(b,a,e,c){b=b._dependentKeys;var g,r,d,f,p;if(b){g=q(c,"deps");r=0;for(d=b.length;r<d;r++)f=b[r],p=q(g,f),p[e]=(p[e]||0)-1,I(a,f,c)}}function v(b,a){b.__ember_arity__=b.length;this.func=b;this._cacheable=a&&void 0!==
a.cacheable?a.cacheable:!0;this._dependentKeys=a&&a.dependentKeys;this._readOnly=a&&(void 0!==a.readOnly||!!a.readOnly)||!1}function y(b){var a;1<arguments.length&&(a=U.call(arguments),b=a.pop());if("function"!==typeof b)throw new z("Computed Property declared without a property function");var e=new v(b);a&&e.property.apply(e,a);return e}function A(b,a){var e=b[H],e=(e=e&&e.cache)&&e[a];return e===s?void 0:e}function x(b,a){for(var e={},c=0;c<a.length;c++)e[a[c]]=E(b,a[c]);return e}function G(b,a){y[b]=
function(b){var e=U.call(arguments);return y(b,function(){return a.apply(this,e)})}}function B(b,a){y[b]=function(){var b=U.call(arguments),e=y(function(){return a.apply(this,[x(this,b)])});return e.property.apply(e,b)}}var C=a["default"],E=m.get,M=n.set,L=f.meta,H=f.META_KEY,K=f.inspect;a=k.create;var t=d.watch,I=d.unwatch,N=h["default"],z=c["default"];d=b.Descriptor;var F=b.defineProperty,P=g.propertyWillChange,O=g.propertyDidChange,R=p["default"],X=u.isNone;C.warn("The CP_DEFAULT_CACHEABLE flag has been removed and computed properties are always cached by default. Use `volatile` if you don't want caching.",
!1!==C.ENV.CP_DEFAULT_CACHEABLE);var U=[].slice,Y=a;v.prototype=new d;b=v.prototype;b._dependentKeys=void 0;b._suspended=void 0;b._meta=void 0;b.cacheable=function(b){this._cacheable=!1!==b;return this};b.volatile=function(){return this.cacheable(!1)};b.readOnly=function(b){this._readOnly=void 0===b||!!b;return this};b.property=function(){var b,a=function(a){b.push(a)};b=[];for(var e=0,c=arguments.length;e<c;e++)N(arguments[e],a);this._dependentKeys=b;return this};b.meta=function(b){if(0===arguments.length)return this._meta||
{};this._meta=b;return this};b.didChange=function(b,a){if(this._cacheable&&this._suspended!==b){var e=L(b);void 0!==e.cache[a]&&(e.cache[a]=void 0,r(this,b,a,e))}};b.get=function(b,a){var c,g,r;if(this._cacheable){r=L(b);g=r.cache;c=g[a];if(c===s)return;if(void 0!==c)return c;c=this.func.call(b,a);g[a]=void 0===c?s:c;if(g=r.chainWatchers&&r.chainWatchers[a])for(var q=0,d=g.length;q<d;q++)g[q].didChange(null);e(this,b,a,r)}else c=this.func.call(b,a);return c};b.set=function(b,a,c){var g=this._cacheable,
r=this.func,q=L(b,g),d=this._suspended,f=!1,p=q.cache,h,k,v;if(this._readOnly)throw new z('Cannot set read-only property "'+a+'" on object: '+K(b));this._suspended=b;try{g&&void 0!==p[a]&&(k=p[a],f=!0);h=r.wrappedFunction?r.wrappedFunction.__ember_arity__:r.__ember_arity__;if(3===h)v=r.call(b,a,c,k);else if(2===h)v=r.call(b,a,c);else{F(b,a,null,k);M(b,a,c);return}if(f&&k===v)return;var l=q.watching[a];l&&P(b,a);f&&(p[a]=void 0);g&&(f||e(this,b,a,q),p[a]=void 0===v?s:v);l&&O(b,a)}finally{this._suspended=
d}return v};b.teardown=function(b,a){var e=L(b);a in e.cache&&r(this,b,a,e);this._cacheable&&delete e.cache[a];return null};A.set=function(b,a,e){b[a]=void 0===e?s:e};A.get=function(b,a){var e=b[a];return e===s?void 0:e};A.remove=function(b,a){b[a]=void 0};y.empty=function(b){return y(b+".length",function(){return R(E(this,b))})};G("notEmpty",function(b){return!R(E(this,b))});G("none",function(b){return X(E(this,b))});G("not",function(b){return!E(this,b)});G("bool",function(b){return!!E(this,b)});
G("match",function(b,a){var e=E(this,b);return"string"===typeof e?a.test(e):!1});G("equal",function(b,a){return E(this,b)===a});G("gt",function(b,a){return E(this,b)>a});G("gte",function(b,a){return E(this,b)>=a});G("lt",function(b,a){return E(this,b)<a});G("lte",function(b,a){return E(this,b)<=a});B("and",function(b){for(var a in b)if(b.hasOwnProperty(a)&&!b[a])return!1;return!0});B("or",function(b){for(var a in b)if(b.hasOwnProperty(a)&&b[a])return!0;return!1});B("any",function(b){for(var a in b)if(b.hasOwnProperty(a)&&
b[a])return b[a];return null});B("collect",function(b){var a=[],e;for(e in b)b.hasOwnProperty(e)&&(X(b[e])?a.push(null):a.push(b[e]));return a});y.alias=function(b){return y(b,function(a,e){1<arguments.length&&M(this,b,e);return E(this,b)})};y.oneWay=function(b){return y(b,function(){return E(this,b)})};C.FEATURES.isEnabled("query-params-new")&&(y.reads=y.oneWay);y.readOnly=function(b){return y(b,function(){return E(this,b)}).readOnly()};y.defaultTo=function(b){return y(function(a,e,c){return 1===
arguments.length?E(this,b):null!=e?e:E(this,b)})};y.deprecatingAlias=function(b){return y(b,function(a,e){C.deprecate("Usage of `"+a+"` is deprecated, use `"+b+"` instead.");return 1<arguments.length?(M(this,b,e),e):E(this,b)})};w.ComputedProperty=v;w.computed=y;w.cacheFor=A});t("ember-metal/core",["exports"],function(a){"undefined"===typeof D&&(D={});D.imports=D.imports||this;var m=D.exports=D.exports||this;D.lookup=D.lookup||this;m.Em=m.Ember=D;D.isNamespace=!0;D.toString=function(){return"Ember"};
D.VERSION="1.7.0-beta.1+canary.3d81867a";D.ENV||(D.ENV="undefined"!==typeof EmberENV?EmberENV:"undefined"!==typeof ENV?ENV:{});D.config=D.config||{};"undefined"===typeof D.ENV.DISABLE_RANGE_API&&(D.ENV.DISABLE_RANGE_API=!0);"undefined"===typeof MetamorphENV&&(m.MetamorphENV={});MetamorphENV.DISABLE_RANGE_API=D.ENV.DISABLE_RANGE_API;D.FEATURES=D.ENV.FEATURES||{};D.FEATURES.isEnabled=function(a){a=D.FEATURES[a];return D.ENV.ENABLE_ALL_FEATURES?!0:!0===a||!1===a||void 0===a?a:D.ENV.ENABLE_OPTIONAL_FEATURES?
!0:!1};D.EXTEND_PROTOTYPES=D.ENV.EXTEND_PROTOTYPES;"undefined"===typeof D.EXTEND_PROTOTYPES&&(D.EXTEND_PROTOTYPES=!0);D.LOG_STACKTRACE_ON_DEPRECATION=!1!==D.ENV.LOG_STACKTRACE_ON_DEPRECATION;D.SHIM_ES5=!1===D.ENV.SHIM_ES5?!1:D.EXTEND_PROTOTYPES;D.LOG_VERSION=!1===D.ENV.LOG_VERSION?!1:!0;D.K=function(){return this};"undefined"===typeof D.assert&&(D.assert=D.K);"undefined"===typeof D.warn&&(D.warn=D.K);"undefined"===typeof D.debug&&(D.debug=D.K);"undefined"===typeof D.runInDebug&&(D.runInDebug=D.K);
"undefined"===typeof D.deprecate&&(D.deprecate=D.K);"undefined"===typeof D.deprecateFunc&&(D.deprecateFunc=function(a,f){return f});D.uuid=0;a["default"]=D});t("ember-metal/enumerable_utils",["ember-metal/array","exports"],function(a,m){var n=a.map,f=a.forEach,l=a.indexOf,k=a.filter,d=Array.prototype.splice,h={map:function(a,b,g){return a.map?a.map.call(a,b,g):n.call(a,b,g)},forEach:function(a,b,g){return a.forEach?a.forEach.call(a,b,g):f.call(a,b,g)},filter:function(a,b,g){return a.filter?a.filter.call(a,
b,g):k.call(a,b,g)},indexOf:function(a,b,g){return a.indexOf?a.indexOf.call(a,b,g):l.call(a,b,g)},indexesOf:function(a,b){return void 0===b?[]:h.map(b,function(b){return h.indexOf(a,b)})},addObject:function(a,b){-1===h.indexOf(a,b)&&a.push(b)},removeObject:function(a,b){var g=h.indexOf(a,b);-1!==g&&a.splice(g,1)},_replace:function(a,b,g,f){f=[].concat(f);for(var h=[],k=g,s;f.length;)s=6E4<k?6E4:k,0>=s&&(s=0),g=f.splice(0,6E4),g=[b,s].concat(g),b+=6E4,k-=s,h=h.concat(d.apply(a,g));return h},replace:function(a,
b,g,d){return a.replace?a.replace(b,g,d):h._replace(a,b,g,d)},intersection:function(a,b){var g=[];h.forEach(a,function(a){0<=h.indexOf(b,a)&&g.push(a)});return g}};m["default"]=h});t("ember-metal/error",["ember-metal/platform","exports"],function(a,m){function n(){var a=Error.apply(this,arguments);Error.captureStackTrace&&Error.captureStackTrace(this,D.Error);for(var d=0;d<l.length;d++)this[l[d]]=a[l[d]]}var f=a.create,l="description fileName lineNumber message name number stack".split(" ");n.prototype=
f(Error.prototype);m["default"]=n});t("ember-metal/events",["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],function(a,m,n,f){function l(b,a,c){for(var g=-1,d=b.length-3;0<=d;d-=3)if(a===b[d]&&c===b[d+1]){g=d;break}return g}function k(b,a){var c=s(b,!0),g;c.listeners||(c.listeners={});c.hasOwnProperty("listeners")||(c.listeners=u(c.listeners));(g=c.listeners[a])&&!c.listeners.hasOwnProperty(a)?g=c.listeners[a]=c.listeners[a].slice():g||(g=c.listeners[a]=[]);return g}function d(b,
a,g,d){function f(c,g){var r=k(b,a),d=l(r,c,g);-1!==d&&(r.splice(d,3),"function"===typeof b.didRemoveListener&&b.didRemoveListener(a,c,g))}h.assert("You must pass at least an object and event name to Ember.removeListener",!!b&&!!a);!d&&"function"===typeof g&&(d=g,g=null);if(d)f(g,d);else if(g=(g=b[c])&&g.listeners&&g.listeners[a])for(d=g.length-3;0<=d;d-=3)f(g[d],g[d+1])}var h=a["default"],c=m.META_KEY,b=m.tryFinally,g=m.apply,p=m.applyStr,u=n.create,w=[].slice,s=m.meta;f.listenersUnion=function(b,
a,g){if(a=(b=b[c])&&b.listeners&&b.listeners[a])for(b=a.length-3;0<=b;b-=3){var d=a[b],f=a[b+1],p=a[b+2];-1===l(g,d,f)&&g.push(d,f,p)}};f.listenersDiff=function(b,a,g){a=(b=b[c])&&b.listeners&&b.listeners[a];b=[];if(a){for(var d=a.length-3;0<=d;d-=3){var f=a[d],p=a[d+1],s=a[d+2];-1===l(g,f,p)&&(g.push(f,p,s),b.push(f,p,s))}return b}};f.addListener=function(b,a,c,g,d){h.assert("You must pass at least an object and event name to Ember.addListener",!!b&&!!a);!g&&"function"===typeof c&&(g=c,c=null);var f=
k(b,a),p=l(f,c,g),s=0;d&&(s|=1);-1===p&&(f.push(c,g,s),"function"===typeof b.didAddListener&&b.didAddListener(a,c,g))};f.suspendListener=function(a,e,c,g,d){!g&&"function"===typeof c&&(g=c,c=null);var f=k(a,e),p=l(f,c,g);-1!==p&&(f[p+2]|=2);return b(function(){return d.call(c)},function(){-1!==p&&(f[p+2]&=-3)})};f.suspendListeners=function(a,e,c,g,d){!g&&"function"===typeof c&&(g=c,c=null);var f=[],p=[],s,h,m;h=0;for(m=e.length;h<m;h++){s=e[h];s=k(a,s);var u=l(s,c,g);-1!==u&&(s[u+2]|=2,f.push(u),
p.push(s))}return b(function(){return d.call(c)},function(){for(var b=0,a=f.length;b<a;b++)p[b][f[b]+2]&=-3})};f.watchedEvents=function(b){b=b[c].listeners;var a=[];if(b)for(var g in b)b[g]&&a.push(g);return a};f.sendEvent=function(b,a,r,f){b!==h&&"function"===typeof b.sendEvent&&b.sendEvent(a,r);f||(f=(f=b[c])&&f.listeners&&f.listeners[a]);if(f){for(var s=f.length-3;0<=s;s-=3){var k=f[s],l=f[s+1],m=f[s+2];if(l&&!(m&2))if(m&1&&d(b,a,k,l),k||(k=b),"string"===typeof l)if(r)p(k,l,r);else k[l]();else r?
g(k,l,r):l.call(k)}return!0}};f.hasListeners=function(b,a){var g=b[c],g=g&&g.listeners&&g.listeners[a];return!(!g||!g.length)};f.listenersFor=function(b,a){var g=[],d=b[c],d=d&&d.listeners&&d.listeners[a];if(!d)return g;for(var f=0,p=d.length;f<p;f+=3)g.push([d[f],d[f+1]]);return g};f.on=function(){var b=w.call(arguments,-1)[0],a=w.call(arguments,0,-1);b.__ember_listens__=a;return b};f.removeListener=d});t("ember-metal/expand_properties",["ember-metal/error","ember-metal/enumerable_utils","exports"],
function(a,m,n){var f=a["default"],l=m["default"].forEach,k=/^((?:[^\.]*\.)*)\{(.*)\}$/;n["default"]=function(a,h){var c,b;if(-1<a.indexOf(" "))throw new f("Brace expanded properties cannot contain spaces, e.g. `user.{firstName, lastName}` should be `user.{firstName,lastName}`");(c=k.exec(a))?(b=c[1],c=c[2],l(c.split(","),function(a){h(b+a)})):h(a)}});t("ember-metal/get_properties",["ember-metal/property_get","ember-metal/utils","exports"],function(a,m,n){var f=a.get,l=m.typeOf;n["default"]=function(a){var d=
{},h=arguments,c=1;2===arguments.length&&"array"===l(arguments[1])&&(c=0,h=arguments[1]);for(var b=h.length;c<b;c++)d[h[c]]=f(a,h[c]);return d}});t("ember-metal/instrumentation",["ember-metal/core","ember-metal/utils","exports"],function(a,m,n){var f=a["default"],l=m.tryCatchFinally,k=[],d={},h=function(b){for(var a=[],c,f=0,h=k.length;f<h;f++)c=k[f],c.regex.test(b)&&a.push(c.object);return d[b]=a},c=function(){var b="undefined"!==typeof window?window.performance||{}:{},a=b.now||b.mozNow||b.webkitNow||
b.msNow||b.oNow;return a?a.bind(b):function(){return+new Date}}();n.instrument=function(b,a,p,k){var m=d[b],s,q;f.STRUCTURED_PROFILE&&(s=b+": "+a.object,console.time(s));m||(m=h(b));if(0===m.length)return q=p.call(k),f.STRUCTURED_PROFILE&&console.timeEnd(s),q;var e=[],r,v,n;return l(function(){v=0;for(n=m.length;v<n;v++)r=m[v],e[v]=r.before(b,c(),a);return p.call(k)},function(b){a=a||{};a.exception=b},function(){v=0;for(n=m.length;v<n;v++)r=m[v],r.after(b,c(),a,e[v]);f.STRUCTURED_PROFILE&&console.timeEnd(s)})};
n.subscribe=function(b,a){for(var c=b.split("."),f,h=[],s=0,q=c.length;s<q;s++)f=c[s],"*"===f?h.push("[^\\.]*"):h.push(f);h=h.join("\\.");c={pattern:b,regex:RegExp("^"+(h+"(\\..*)?")+"$"),object:a};k.push(c);d={};return c};n.unsubscribe=function(b){for(var a,c=0,f=k.length;c<f;c++)k[c]===b&&(a=c);k.splice(a,1);d={}};n.reset=function(){k=[];d={}}});t("ember-metal/is_blank",["ember-metal/core","ember-metal/is_empty","exports"],function(a,m,n){var f=m["default"];n["default"]=function(a){return f(a)||
"string"===typeof a&&null===a.match(/\S/)}});t("ember-metal/is_empty",["ember-metal/core","ember-metal/property_get","ember-metal/is_none","exports"],function(a,m,n,f){function l(a){return d(a)||0===a.length&&"function"!==typeof a||"object"===typeof a&&0===k(a,"length")}var k=m.get,d=n["default"];a=a["default"].deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",l);f.empty=a;f["default"]=l;f.isEmpty=l;f.empty=a});t("ember-metal/is_none",["ember-metal/core","exports"],function(a,
m){function n(a){return null===a||void 0===a}var f=a["default"].deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",n);m.none=f;m["default"]=n;m.isNone=n});t("ember-metal/libraries",["ember-metal/enumerable_utils","exports"],function(a,m){var n=a["default"],f=n.forEach,l=n.indexOf,n=function(){var a=[],d=0,h=function(c){for(var b=0;b<a.length;b++)if(a[b].name===c)return a[b]};a.register=function(c,b){h(c)||a.push({name:c,version:b})};a.registerCoreLibrary=function(c,b){h(c)||
a.splice(d++,0,{name:c,version:b})};a.deRegister=function(c){(c=h(c))&&a.splice(l(a,c),1)};a.each=function(c){f(a,function(b){c(b.name,b.version)})};return a}();m["default"]=n});t("ember-metal/logger",["ember-metal/core","ember-metal/error","exports"],function(a,m,n){function f(a){var c,b;k.imports.console?c=k.imports.console:"undefined"!==typeof console&&(c=console);var g="object"===typeof c?c[a]:null;if(g)return"function"===typeof g.apply?(b=function(){g.apply(c,arguments)},b.displayName="console."+
a,b):function(){var b=Array.prototype.join.call(arguments,", ");g(b)}}function l(a,c){if(!a)try{throw new d("assertion failed: "+c);}catch(b){setTimeout(function(){throw b;},0)}}var k=a["default"],d=m["default"];n["default"]={log:f("log")||k.K,warn:f("warn")||k.K,error:f("error")||k.K,info:f("info")||k.K,debug:f("debug")||f("info")||k.K,assert:f("assert")||l}});t("ember-metal/map",["ember-metal/property_set","ember-metal/utils","ember-metal/array","ember-metal/platform","exports"],function(a,m,n,
f,l){function k(b){var a={},c;for(c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function d(b,a){var c=b.keys.copy(),e=k(b.values);a.keys=c;a.values=e;a.length=b.length;return a}function h(){this.clear()}function c(){this.keys=h.create();this.values={}}function b(b){c.call(this);this.defaultValue=b.defaultValue}var g=a.set,p=m.guidFor,u=n.indexOf;a=f.create;h.create=function(){return new h};h.prototype={clear:function(){this.presenceSet={};this.list=[]},add:function(b){var a=p(b),c=this.presenceSet,
e=this.list;a in c||(c[a]=!0,e.push(b))},remove:function(b){var a=p(b),c=this.list;delete this.presenceSet[a];b=u.call(c,b);-1<b&&c.splice(b,1)},isEmpty:function(){return 0===this.list.length},has:function(b){return p(b)in this.presenceSet},forEach:function(b,a){for(var c=this.toArray(),e=0,g=c.length;e<g;e++)b.call(a,c[e])},toArray:function(){return this.list.slice()},copy:function(){var b=new h;b.presenceSet=k(this.presenceSet);b.list=this.toArray();return b}};D.Map=c;c.create=function(){return new c};
c.prototype={length:0,get:function(b){var a=this.values;b=p(b);return a[b]},set:function(b,a){var c=this.keys,e=this.values,d=p(b);c.add(b);e[d]=a;g(this,"length",c.list.length)},remove:function(b){var a=this.keys,c=this.values,e=p(b);return c.hasOwnProperty(e)?(a.remove(b),delete c[e],g(this,"length",a.list.length),!0):!1},has:function(b){var a=this.values;b=p(b);return a.hasOwnProperty(b)},forEach:function(b,a){var c=this.values;this.keys.forEach(function(e){var g=p(e);b.call(a,e,c[g])})},copy:function(){return d(this,
new c)}};b.create=function(a){return a?new b(a):new c};b.prototype=a(c.prototype);b.prototype.get=function(b){if(this.has(b))return c.prototype.get.call(this,b);var a=this.defaultValue(b);this.set(b,a);return a};b.prototype.copy=function(){return d(this,new b({defaultValue:this.defaultValue}))};l.OrderedSet=h;l.Map=c;l.MapWithDefault=b});t("ember-metal/merge",["exports"],function(a){a["default"]=function(a,n){for(var f in n)n.hasOwnProperty(f)&&(a[f]=n[f]);return a}});t("ember-metal/mixin","ember-metal/core ember-metal/merge ember-metal/array ember-metal/platform ember-metal/utils ember-metal/expand_properties ember-metal/properties ember-metal/computed ember-metal/binding ember-metal/observer ember-metal/events exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p){function u(){var b,a=this.__nextSuper;a&&(this.__nextSuper=null,b=F(this,a,arguments),this.__nextSuper=a);return b}function w(b,a){a&&0<a.length&&(b.mixins=W.call(a,function(b){if(b instanceof B)return b;var a=new B;a.properties=b;return a}));return b}function s(b){return"function"===typeof b&&!1!==b.isMethod&&b!==Boolean&&b!==Object&&b!==Number&&b!==Array&&b!==Date&&b!==String}function q(b,a){var e;if(a instanceof B){e=t(a);if(b[e])return la;b[e]=a;return a.properties}return a}
function e(b,a,e,c){e=e[b]||c[b];a[b]&&(e=e?e.concat(a[b]):a[b]);return e}function r(b,a,e,c,g){var d;void 0===g[a]&&(d=c[a]);d=d||b[a];return"function"!==typeof d?e:N(e,d)}function v(b,a,e,c,g,d,f,q){if(e instanceof O){if(e===D&&g[a])return la;if(e.func){b=e;var p;void 0===d[a]&&(p=g[a]);if((p=p||c.descs[a])&&p instanceof X)b=fa(b),b.func=N(b.func,p.func);e=b}g[a]=e;d[a]=void 0}else{if(f&&0<=T.call(f,a)||"concatenatedProperties"===a||"mergedProperties"===a){var h=e;e=(b=d[a]||b[a])?"function"===
typeof b.concat?b.concat(h):z(b).concat(h):z(h)}else if(q&&0<=T.call(q,a))if(c=e,p=d[a]||b[a]){e=K({},p);f=!1;for(h in c)c.hasOwnProperty(h)&&(q=c[h],s(q)?(f=!0,e[h]=r(b,h,q,p,{})):e[h]=q);f&&(e._super=u)}else e=c;else s(e)&&(e=r(b,a,e,d,g));g[a]=void 0;d[a]=e}}function y(b,a,c,g,d,f){function r(b){delete c[b];delete g[b]}for(var p,h,s,k,l,m=0,u=b.length;m<u;m++)if(p=b[m],H.assert("Expected hash or Mixin instance, got "+Object.prototype.toString.call(p),"object"===typeof p&&null!==p&&"[object Array]"!==
Object.prototype.toString.call(p)),h=q(a,p),h!==la)if(h){l=aa(d);d.willMergeMixin&&d.willMergeMixin(h);p=e("concatenatedProperties",h,g,d);k=e("mergedProperties",h,g,d);for(s in h)h.hasOwnProperty(s)&&(f.push(s),v(d,s,h[s],l,c,g,p,k));h.hasOwnProperty("toString")&&(d.toString=h.toString)}else p.mixins&&(y(p.mixins,a,c,g,d,f),p._without&&ca.call(p._without,r))}function A(b,a){var e=a||aa(b),c=e.bindings,g,d,f;if(c){for(g in c)if(d=c[g])f=g.slice(0,-7),d instanceof U?(d=d.copy(),d.to(f)):d=new U(f,
d),d.connect(b),b[g]=d;e.bindings={}}return b}function x(b,a,e,c,g){if(e=e[c]){c=0;for(var d=e.length;c<d;c++)g(b,e[c],null,a)}}function G(b,a,e){var c,g,d={},f={},r=aa(b),q,p=[];b._super=u;var h=y,s=aa(b,!0);(q=s.mixins)?s.hasOwnProperty("mixins")||(q=s.mixins=fa(q)):q=s.mixins={};h(a,q,d,f,b,p);h=0;for(s=p.length;h<s;h++)if(a=p[h],"constructor"!==a&&f.hasOwnProperty(a)&&(q=d[a],c=f[a],q!==D)){for(;q&&q instanceof M;)c=q,g=c.methodName,q=void 0,d[g]||f[g]?(q=f[g],c=d[g]):r.descs[g]?(c=r.descs[g],
q=void 0):(c=void 0,q=b[g]),g=q,q=c,c=g;if(!(void 0===q&&void 0===c)){g=b;var k=a,l=c,m=g[k];"function"===typeof m&&(x(g,k,m,"__ember_observesBefore__",V),x(g,k,m,"__ember_observes__",da),x(g,k,m,"__ember_listens__",Z));"function"===typeof l&&(x(g,k,l,"__ember_observesBefore__",ea),x(g,k,l,"__ember_observes__",Y),x(g,k,l,"__ember_listens__",J));g=a;k=c;l=r;ja.test(g)&&((m=l.bindings)?l.hasOwnProperty("bindings")||(m=l.bindings=fa(l.bindings)):m=l.bindings={},m[g]=k);R(b,a,q,c,r)}}e||A(b,r);return b}
function B(){return w(this,arguments)}function C(b,a,e){var c=t(b);if(e[c])return!1;e[c]=!0;if(b===a)return!0;for(c=(b=b.mixins)?b.length:0;0<=--c;)if(C(b[c],a,e))return!0;return!1}function E(b,a,e){if(!e[t(a)])if(e[t(a)]=!0,a.properties){a=a.properties;for(var c in a)a.hasOwnProperty(c)&&(b[c]=!0)}else a.mixins&&ca.call(a.mixins,function(a){E(b,a,e)})}function M(b){this.methodName=b}function L(){var b=$.call(arguments,-1)[0],a,e=function(b){a.push(b)},c=$.call(arguments,0,-1);"function"!==typeof b&&
(b=arguments[0],c=$.call(arguments,1));a=[];for(var g=0;g<c.length;++g)P(c[g],e);if("function"!==typeof b)throw new H.Error("Ember.observer called without a function");b.__ember_observes__=a;return b}var H=a["default"],K=m["default"],t=l.guidFor,I=l.META_KEY,N=l.wrap,z=l.makeArray,F=l.apply,P=k["default"],O=d.Descriptor,R=d.defineProperty,X=h.ComputedProperty,U=c.Binding,Y=b.addObserver,da=b.removeObserver,ea=b.addBeforeObserver,V=b.removeBeforeObserver,J=g.addListener,Z=g.removeListener,D,W=n.map,
T=n.indexOf,ca=n.forEach,$=[].slice,fa=f.create,aa=l.meta,la={},ja=/^.+Binding$/;p.mixin=function(b){var a=$.call(arguments,1);G(b,a,!1);return b};p["default"]=B;B.prototype={properties:null,mixins:null,ownerConstructor:null};B._apply=G;B.applyPartial=function(b){var a=$.call(arguments,1);return G(b,a,!0)};B.finishPartial=A;H.anyUnprocessedMixins=!1;B.create=function(){H.anyUnprocessedMixins=!0;return w(new this,arguments)};a=B.prototype;a.reopen=function(){var b,a;this.properties?(b=B.create(),b.properties=
this.properties,delete this.properties,this.mixins=[b]):this.mixins||(this.mixins=[]);var e=arguments.length,c=this.mixins,g;for(g=0;g<e;g++)b=arguments[g],H.assert("Expected hash or Mixin instance, got "+Object.prototype.toString.call(b),"object"===typeof b&&null!==b&&"[object Array]"!==Object.prototype.toString.call(b)),b instanceof B?c.push(b):(a=B.create(),a.properties=b,c.push(a));return this};a.apply=function(b){return G(b,[this],!1)};a.applyPartial=function(b){return G(b,[this],!0)};a.detect=
function(b){return!b?!1:b instanceof B?C(b,this,{}):(b=(b=b[I])&&b.mixins)?!!b[t(this)]:!1};a.without=function(){var b=new B(this);b._without=$.call(arguments);return b};a.keys=function(){var b={},a=[];E(b,this,{});for(var e in b)b.hasOwnProperty(e)&&a.push(e);return a};B.mixins=function(b){b=(b=b[I])&&b.mixins;var a=[];if(!b)return a;for(var e in b){var c=b[e];c.properties||a.push(c)}return a};D=new O;D.toString=function(){return"(Required Property)"};p.required=function(){return D};M.prototype=
new O;p.aliasMethod=function(b){return new M(b)};p.observer=L;p.immediateObserver=function(){for(var b=0,a=arguments.length;b<a;b++){var e=arguments[b];H.assert("Immediate observers must observe internal properties only, not properties on other objects.","string"!==typeof e||-1===e.indexOf("."))}return L.apply(this,arguments)};p.beforeObserver=function(){var b=$.call(arguments,-1)[0],a,e=function(b){a.push(b)},c=$.call(arguments,0,-1);"function"!==typeof b&&(b=arguments[0],c=$.call(arguments,1));
a=[];for(var g=0;g<c.length;++g)P(c[g],e);if("function"!==typeof b)throw new H.Error("Ember.beforeObserver called without a function");b.__ember_observesBefore__=a;return b};p.IS_BINDING=ja;p.Mixin=B});t("ember-metal/observer",["ember-metal/watching","ember-metal/array","ember-metal/events","exports"],function(a,m,n,f){function l(b){return b+s}function k(b){return b+q}var d=a.watch,h=a.unwatch,c=m.map,b=n.listenersFor,g=n.addListener,p=n.removeListener,u=n.suspendListeners,w=n.suspendListener,s=":change",
q=":before";f.addObserver=function(b,a,c,f){g(b,a+s,c,f);d(b,a);return this};f.observersFor=function(a,c){return b(a,c+s)};f.removeObserver=function(b,a,c,g){h(b,a);p(b,a+s,c,g);return this};f.addBeforeObserver=function(b,a,c,f){g(b,a+q,c,f);d(b,a);return this};f._suspendBeforeObserver=function(b,a,c,g,d){return w(b,a+q,c,g,d)};f._suspendObserver=function(b,a,c,g,d){return w(b,a+s,c,g,d)};f._suspendBeforeObservers=function(b,a,g,d,f){a=c.call(a,k);return u(b,a,g,d,f)};f._suspendObservers=function(b,
a,g,d,f){a=c.call(a,l);return u(b,a,g,d,f)};f.beforeObserversFor=function(a,c){return b(a,c+q)};f.removeBeforeObserver=function(b,a,c,g){h(b,a);p(b,a+q,c,g);return this}});t("ember-metal/observer_set",["ember-metal/utils","ember-metal/events","exports"],function(a,m,n){function f(){this.clear()}var l=a.guidFor,k=m.sendEvent;n["default"]=f;f.prototype.add=function(a,f,c){var b=this.observerSet,g=this.observers,p=l(a),k=b[p];k||(b[p]=k={});b=k[f];void 0===b&&(b=g.push({sender:a,keyName:f,eventName:c,
listeners:[]})-1,k[f]=b);return g[b].listeners};f.prototype.flush=function(){var a=this.observers,f,c,b,g;this.clear();f=0;for(c=a.length;f<c;++f)b=a[f],g=b.sender,!g.isDestroying&&!g.isDestroyed&&k(g,b.eventName,[g,b.keyName],b.listeners)};f.prototype.clear=function(){this.observerSet={};this.observers=[]}});t("ember-metal/platform",["ember-metal/core","exports"],function(a,m){var n=a["default"],f={},l=Object.create;l&&2!==l({a:1},{a:{value:2}}).a&&(l=null);if(!l||n.ENV.STUB_OBJECT_CREATE){var k=
function(){},l=function(b,a){k.prototype=b;b=new k;if(a){k.prototype=b;for(var c in a)k.prototype[c]=a[c].value;b=new k}k.prototype=null;return b};l.isSimulated=!0}var d=Object.defineProperty,h,c;if(d)try{d({},"a",{get:function(){}})}catch(b){d=null}if(d){h=function(){var b={};d(b,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}});d(b,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0});return!0===b.a}();a:{try{d(document.createElement("div"),"definePropertyOnDOM",{});c=!0;
break a}catch(g){}c=!1}h?c||(d=function(b,a,c){return("object"===typeof Node?b instanceof Node:"object"===typeof b&&"number"===typeof b.nodeType&&"string"===typeof b.nodeName)?b[a]=c.value:Object.defineProperty(b,a,c)}):d=null}f.defineProperty=d;f.hasPropertyAccessors=!0;f.defineProperty||(f.hasPropertyAccessors=!1,f.defineProperty=function(b,a,c){c.get||(b[a]=c.value)},f.defineProperty.isSimulated=!0);n.ENV.MANDATORY_SETTER&&!f.hasPropertyAccessors&&(n.ENV.MANDATORY_SETTER=!1);m.create=l;m.platform=
f});t("ember-metal/properties","ember-metal/core ember-metal/utils ember-metal/platform ember-metal/property_events ember-metal/property_get ember-metal/property_set exports".split(" "),function(a,m,n,f,l,k,d){function h(){}function c(b,a,c,g,d){var f,p,s;d||(d=q(b));f=d.descs;p=d.descs[a];s=0<d.watching[a];p instanceof h&&p.teardown(b,a);c instanceof h?(p=c,f[a]=c,r&&s?e(b,a,{configurable:!0,enumerable:!0,writable:!0,value:void 0}):b[a]=void 0):(f[a]=void 0,null==c?(p=g,r&&s?(d.values[a]=g,e(b,a,
{configurable:!0,enumerable:!0,set:v,get:y(a)})):b[a]=g):(p=c,e(b,a,c)));s&&u(b,a,d);b.didDefineProperty&&b.didDefineProperty(b,a,p);return this}var b=a["default"],g=m.META_KEY,p=n.platform,u=f.overrideChains,w=l.get,s=k.set,q=m.meta,e=p.defineProperty,r=b.ENV.MANDATORY_SETTER;d.Descriptor=h;var v=b.MANDATORY_SETTER_FUNCTION=function(a){b.assert("You must use Ember.set() to access this property (of "+this+")",!1)},y=b.DEFAULT_GETTER_FUNCTION=function(b){return function(){var a=this[g];return a&&a.values[b]}};
d.defineProperty=c;d.deprecateProperty=function(a,e,g){function d(){b.deprecate("Usage of `"+e+"` is deprecated, use `"+g+"` instead.")}p.hasPropertyAccessors&&c(a,e,{configurable:!0,enumerable:!1,set:function(b){d();s(a,g,b)},get:function(){d();return w(a,g)}})}});t("ember-metal/property_events",["ember-metal/utils","ember-metal/events","ember-metal/observer_set","exports"],function(a,m,n,f){function l(a,c){var e=a[b],g=e&&e.proto,f=e&&e.descs[c];if((e&&0<e.watching[c]||"length"===c)&&g!==a){f&&
f.willChange&&f.willChange(a,c);a.isDestroying||(g=v,(f=!g)&&(g=v={}),d(l,a,c,g,e),f&&(v=null));if(e.hasOwnProperty("chainWatchers")&&e.chainWatchers[c]){var e=e.chainWatchers[c],g=[],p,f=0;for(p=e.length;f<p;f++)e[f].willChange(g);f=0;for(p=g.length;f<p;f+=2)l(g[f],g[f+1])}a.isDestroying||(e=c+":before",r?(g=q.add(a,c,e),g=s(a,e,g),u(a,e,[a,c],g)):u(a,e,[a,c]))}}function k(a,c){var g=a[b],f=g&&0<g.watching[c]||"length"===c,q=g&&g.descs[c];if((g&&g.proto)!==a&&(q&&q.didChange&&q.didChange(a,c),f||
"length"===c))a.isDestroying||(f=y,(q=!f)&&(f=y={}),d(k,a,c,f,g),q&&(y=null)),h(a,c,g,!1),a.isDestroying||(g=c+":change",r?(f=e.add(a,c,g),w(a,g,f)):u(a,g,[a,c]))}function d(b,a,c,e,d){var f=g(a);e[f]||(e[f]={});if(!e[f][c]&&(e[f][c]=!0,e=(e=d.deps)&&e[c]))for(var r in e)(c=d.descs[r])&&c._suspended===a||b(a,r)}function h(b,a,c,e){if(c&&c.hasOwnProperty("chainWatchers")&&c.chainWatchers[a]){b=c.chainWatchers[a];a=e?null:[];var g;c=0;for(g=b.length;c<g;c++)b[c].didChange(a);if(!e){c=0;for(g=a.length;c<
g;c+=2)k(a[c],a[c+1])}}}function c(){r--;0>=r&&(q.clear(),e.flush())}var b=a.META_KEY,g=a.guidFor,p=a.tryFinally,u=m.sendEvent,w=m.listenersUnion,s=m.listenersDiff;a=n["default"];var q=new a,e=new a,r=0,v,y;f.propertyWillChange=l;f.propertyDidChange=k;f.overrideChains=function(b,a,c){h(b,a,c,!0)};f.beginPropertyChanges=function(){r++};f.endPropertyChanges=c;f.changeProperties=function(b,a){r++;p(b,c,a)}});t("ember-metal/property_get",["ember-metal/core","ember-metal/utils","ember-metal/error","exports"],
function(a,m,n,f){function l(a,g){var e=0===g.indexOf(u),f=!e&&p.test(g);if(!a||f)a=d.lookup;e&&(g=g.slice(5));a===d.lookup&&(e=g.match(w)[0],a=b(a,e),g=g.slice(e.length+1));if(!g||0===g.length)throw new c("Path cannot be empty");return[a,g]}function k(a,c){var e,g,f;if(null===a&&-1===c.indexOf("."))return b(d.lookup,c);e=0===c.indexOf(u);if(!a||e)e=l(a,c),a=e[0],c=e[1],e.length=0;e=c.split(".");f=e.length;for(g=0;null!=a&&g<f;g++)if((a=b(a,e[g],!0))&&a.isDestroyed)return;return a}var d=a["default"],
h=m.META_KEY,c=n["default"],b,g=d.ENV.MANDATORY_SETTER,p=/^([A-Z$]|([0-9][A-Z$])).*[\.]/,u="this.",w=/^([^\.]+)/;b=function(b,a){if(""===a)return b;!a&&"string"===typeof b&&(a=b,b=null);d.assert("Cannot call get with "+a+" key.",!!a);d.assert("Cannot call get with '"+a+"' on an undefined object.",void 0!==b);if(null===b)return k(b,a);var c=b[h],f=c&&c.descs[a];if(void 0===f&&-1!==a.indexOf("."))return k(b,a);if(f)return f.get(b,a);c=g&&c&&0<c.watching[a]?c.values[a]:b[a];return void 0===c&&"object"===
typeof b&&!(a in b)&&"function"===typeof b.unknownProperty?b.unknownProperty(a):c};d.config.overrideAccessors&&(d.get=b,d.config.overrideAccessors(),b=d.get);f.getWithDefault=function(a,c,e){a=b(a,c);return void 0===a?e:a};f["default"]=b;f.get=b;f.normalizeTuple=l;f._getPath=k});t("ember-metal/property_set","ember-metal/core ember-metal/property_get ember-metal/utils ember-metal/property_events ember-metal/properties ember-metal/error exports".split(" "),function(a,m,n,f,l,k,d){function h(a,c,e,g){var d;
d=c.slice(c.lastIndexOf(".")+1);c=c===d?d:c.slice(0,c.length-(d.length+1));"this"!==c&&(a=b(a,c));if(!d||0===d.length)throw new s("Property set failed: You passed an empty path");if(!a){if(g)return;throw new s('Property set failed: object in path "'+c+'" could not be found or was destroyed.');}return r(a,d,e)}var c=a["default"],b=m._getPath,g=n.META_KEY,p=f.propertyWillChange,u=f.propertyDidChange,w=l.defineProperty,s=k["default"],q=c.ENV.MANDATORY_SETTER,e=/^([A-Z$]|([0-9][A-Z$]))/,r=function(b,
a,d,f){"string"===typeof b&&(c.assert("Path '"+b+"' must be global if no obj is given.",e.test(b)),d=a,a=b,b=null);c.assert("Cannot call set with "+a+" key.",!!a);if(!b)return h(b,a,d,f);var r=b[g],k=r&&r.descs[a];if(void 0===k&&-1!==a.indexOf("."))return h(b,a,d,f);c.assert("You need to provide an object and key to `set`.",!!b&&void 0!==a);c.assert("calling set on destroyed object",!b.isDestroyed);if(void 0!==k)k.set(b,a,d);else{if("object"===typeof b&&null!==b&&void 0!==d&&b[a]===d)return d;"object"===
typeof b&&!(a in b)&&"function"===typeof b.setUnknownProperty?b.setUnknownProperty(a,d):r&&0<r.watching[a]?(f=q?r.values[a]:b[a],d!==f&&(p(b,a),q?void 0===f&&!(a in b)||!b.propertyIsEnumerable(a)?w(b,a,null,d):r.values[a]=d:b[a]=d,u(b,a))):b[a]=d}return d};c.config.overrideAccessors&&(c.set=r,c.config.overrideAccessors(),r=c.set);d.trySet=function(b,a,c){return r(b,a,c,!0)};d.set=r});t("ember-metal/run_loop",["ember-metal/core","ember-metal/utils","ember-metal/array","ember-metal/property_events",
"exports"],function(a,m,n,f,l){function k(){return c(g,g.run,arguments)}function d(){k.currentRunLoop||h.assert("You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in an run",!h.testing)}var h=a["default"],c=m.apply,b=n.indexOf;a=f.beginPropertyChanges;f=f.endPropertyChanges;var g=new (S("backburner").Backburner)(["sync","actions","destroy"],{sync:{before:a,after:f},defaultQueue:"actions",onBegin:function(b){k.currentRunLoop=
b},onEnd:function(b,a){k.currentRunLoop=a},onErrorTarget:h,onErrorMethod:"onerror"}),p=[].slice;l["default"]=k;k.join=function(b,a){if(!k.currentRunLoop)return c(h,k,arguments);var g=p.call(arguments);g.unshift("actions");c(k,k.schedule,g)};k.bind=function(b,a){var g=p.call(arguments);return function(){return c(k,k.join,g.concat(p.call(arguments)))}};k.backburner=g;k.currentRunLoop=null;k.queues=g.queueNames;k.begin=function(){g.begin()};k.end=function(){g.end()};k.schedule=function(b,a,f){d();c(g,
g.schedule,arguments)};k.hasScheduledTimers=function(){return g.hasTimers()};k.cancelTimers=function(){g.cancelTimers()};k.sync=function(){g.currentInstance&&g.currentInstance.queues.sync.flush()};k.later=function(b,a){return c(g,g.later,arguments)};k.once=function(b,a){d();var f=p.call(arguments);f.unshift("actions");return c(g,g.scheduleOnce,f)};k.scheduleOnce=function(b,a,f){d();return c(g,g.scheduleOnce,arguments)};k.next=function(){var b=p.call(arguments);b.push(1);return c(g,g.later,b)};k.cancel=
function(b){return g.cancel(b)};k.debounce=function(){return c(g,g.debounce,arguments)};k.throttle=function(){return c(g,g.throttle,arguments)};k._addQueue=function(a,c){-1===b.call(k.queues,a)&&k.queues.splice(b.call(k.queues,c)+1,0,a)}});t("ember-metal/set_properties",["ember-metal/property_events","ember-metal/property_set","exports"],function(a,m,n){var f=a.changeProperties,l=m.set;n["default"]=function(a,d){f(function(){for(var f in d)d.hasOwnProperty(f)&&l(a,f,d[f])});return a}});t("ember-metal/utils",
["ember-metal/core","ember-metal/platform","ember-metal/array","exports"],function(a,m,n,f){function l(b){this.descs={};this.watching={};this.cache={};this.cacheMeta={};this.source=b}function k(b,a){var c=b.__ember_meta__;if(!1===a)return c||G;c?c.source!==b&&(x||u(b,"__ember_meta__",A),c=w(c),c.descs=w(c.descs),c.watching=w(c.watching),c.cache={},c.cacheMeta={},c.source=b,r&&(c.values=w(c.values)),b.__ember_meta__=c):(x||u(b,"__ember_meta__",A),c=new l(b),r&&(c.values={}),b.__ember_meta__=c,c.descs.constructor=
null);return c}function d(b){var a;"undefined"===typeof B&&p.__loader.registry["ember-runtime/mixins/array"]&&(B=p.__loader.require("ember-runtime/mixins/array")["default"]);if(!b||b.setInterval)return!1;if(Array.isArray&&Array.isArray(b)||B&&B.detect(b))return!0;a=c(b);return"array"===a||void 0!==b.length&&"object"===a?!0:!1}function h(b,a){return!!(b&&"function"===typeof b[a])}function c(b){var a;"undefined"===typeof M&&p.__loader.registry["ember-runtime/system/object"]&&(M=p.__loader.require("ember-runtime/system/object")["default"]);
a=null===b||void 0===b?String(b):C[E.call(b)]||"object";"function"===a?M&&M.detect(b)&&(a="class"):"object"===a&&(b instanceof Error?a="error":M&&b instanceof M?a="instance":b instanceof Date&&(a="date"));return a}function b(b,a,c){var e=c&&c.length;if(!c||!e)return a.call(b);switch(e){case 1:return a.call(b,c[0]);case 2:return a.call(b,c[0],c[1]);case 3:return a.call(b,c[0],c[1],c[2]);case 4:return a.call(b,c[0],c[1],c[2],c[3]);case 5:return a.call(b,c[0],c[1],c[2],c[3],c[4]);default:return a.apply(b,
c)}}function g(b,a,c){var e=c&&c.length;if(!c||!e)return b[a]();switch(e){case 1:return b[a](c[0]);case 2:return b[a](c[0],c[1]);case 3:return b[a](c[0],c[1],c[2]);case 4:return b[a](c[0],c[1],c[2],c[3]);case 5:return b[a](c[0],c[1],c[2],c[3],c[4]);default:return b[a].apply(b,c)}}var p=a["default"];a=m.platform;n=n.forEach;var u=a.defineProperty,w=m.create,s=[],q={},e=0,r=p.ENV.MANDATORY_SETTER,v="__ember"+ +new Date,y={writable:!1,configurable:!1,enumerable:!1,value:null};f.generateGuid=function(b,
a){a||(a="ember");var c=a+e++;b&&(null===b[v]?b[v]=c:(y.value=c,u(b,v,y)));return c};f.guidFor=function(b){if(void 0===b)return"(undefined)";if(null===b)return"(null)";var a;switch(typeof b){case "number":return(a=s[b])||(a=s[b]="nu"+b),a;case "string":return(a=q[b])||(a=q[b]="st"+e++),a;case "boolean":return b?"(true)":"(false)";default:if(b[v])return b[v];if(b===Object)return"(Object)";if(b===Array)return"(Array)";a="ember"+e++;null===b[v]?b[v]=a:(y.value=a,u(b,v,y));return a}};var A={writable:!0,
configurable:!1,enumerable:!1,value:null},x=a.defineProperty.isSimulated;l.prototype={descs:null,deps:null,watching:null,listeners:null,cache:null,cacheMeta:null,source:null,mixins:null,bindings:null,chains:null,chainWatchers:null,values:null,proto:null};x&&(l.prototype.__preventPlainObject__=!0,l.prototype.toJSON=function(){});var G=new l(null);r&&(G.values={});f.getMeta=function(b,a){return k(b,!1)[a]};f.setMeta=function(b,a,c){return k(b,!0)[a]=c};f.metaPath=function(b,a,c){p.deprecate("Ember.metaPath is deprecated and will be removed from future releases.");
for(var e=k(b,c),g,d,f=0,r=a.length;f<r;f++){g=a[f];if(d=e[g]){if(d.__ember_source__!==b){if(!c)return;d=e[g]=w(d);d.__ember_source__=b}}else{if(!c)return;d=e[g]={__ember_source__:b}}e=d}return d};f.wrap=function(a,c){function e(){var g,d=this.__nextSuper;this.__nextSuper=c;g=b(this,a,arguments);this.__nextSuper=d;return g}e.wrappedFunction=a;e.wrappedFunction.__ember_arity__=a.length;e.__ember_observes__=a.__ember_observes__;e.__ember_observesBefore__=a.__ember_observesBefore__;e.__ember_listens__=
a.__ember_listens__;return e};var B;f.makeArray=function(b){return null===b||void 0===b?[]:d(b)?b:[b]};f.tryInvoke=function(b,a,c){if(h(b,a))return c?g(b,a,c):g(b,a)};m=(a=function(){var b=0;try{throw b++,Error("needsFinallyFixTest");}catch(a){}return 1!==b}())?function(b,a,c){var e,g,d;c=c||this;try{e=b.call(c)}finally{try{g=a.call(c)}catch(f){d=f}}if(d)throw d;return void 0===g?e:g}:function(b,a,c){var e;c=c||this;try{e=b.call(c)}finally{b=a.call(c)}return void 0===b?e:b};a=a?function(b,a,c,e){var g,
d,f;e=e||this;try{g=b.call(e)}catch(r){g=a.call(e,r)}finally{try{d=c.call(e)}catch(q){f=q}}if(f)throw f;return void 0===d?g:d}:function(b,a,c,e){var g;e=e||this;try{g=b.call(e)}catch(d){g=a.call(e,d)}finally{b=c.call(e)}return void 0===b?g:b};var C={};n.call("Boolean Number String Function Array Date RegExp Object".split(" "),function(b){C["[object "+b+"]"]=b.toLowerCase()});var E=Object.prototype.toString,M;f.inspect=function(b){var a=c(b);if("array"===a)return"["+b+"]";if("object"!==a)return b+
"";var e=[],g;for(g in b)b.hasOwnProperty(g)&&(a=b[g],"toString"!==a&&("function"===c(a)&&(a="function() { ... }"),e.push(g+": "+a)));return"{"+e.join(", ")+"}"};f.apply=b;f.applyStr=g;f.GUID_KEY=v;f.GUID_PREFIX="ember";f.META_DESC=A;f.EMPTY_META=G;f.META_KEY="__ember_meta__";f.meta=k;f.typeOf=c;f.tryCatchFinally=a;f.isArray=d;f.canInvoke=h;f.tryFinally=m});t("ember-metal/watch_key",["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],function(a,m,n,f){var l=a["default"],k=m.typeOf,
d=m.meta,h=l.ENV.MANDATORY_SETTER,c=n.platform.defineProperty;f.watchKey=function(b,a,f){if(!("length"===a&&"array"===k(b))){f=f||d(b);var m=f.watching;m[a]?m[a]=(m[a]||0)+1:(m[a]=1,"function"===typeof b.willWatchProperty&&b.willWatchProperty(a),h&&a in b&&(f.values[a]=b[a],c(b,a,{configurable:!0,enumerable:b.propertyIsEnumerable(a),set:l.MANDATORY_SETTER_FUNCTION,get:l.DEFAULT_GETTER_FUNCTION(a)})))}};f.unwatchKey=function(b,a,f){var k=f||d(b);f=k.watching;1===f[a]?(f[a]=0,"function"===typeof b.didUnwatchProperty&&
b.didUnwatchProperty(a),h&&a in b&&c(b,a,{configurable:!0,enumerable:b.propertyIsEnumerable(a),set:function(d){c(b,a,{configurable:!0,writable:!0,enumerable:!0,value:d});delete k.values[a]},get:l.DEFAULT_GETTER_FUNCTION(a)})):1<f[a]&&f[a]--}});t("ember-metal/watch_path",["ember-metal/utils","ember-metal/chains","exports"],function(a,m,n){function f(a,c){var b=c||d(a),g=b.chains;g?g.value()!==a&&(g=b.chains=g.copy(a)):g=b.chains=new k(null,null,a);return g}var l=a.typeOf,k=m.ChainNode,d=a.meta;n.watchPath=
function(a,c,b){if(!("length"===c&&"array"===l(a))){b=b||d(a);var g=b.watching;g[c]?g[c]=(g[c]||0)+1:(g[c]=1,f(a,b).add(c))}};n.unwatchPath=function(a,c,b){b=b||d(a);var g=b.watching;1===g[c]?(g[c]=0,f(a,b).remove(c)):1<g[c]&&g[c]--}});t("ember-metal/watching",["ember-metal/utils","ember-metal/chains","ember-metal/watch_key","ember-metal/watch_path","exports"],function(a,m,n,f,l){function k(b,a,g){"length"===a&&"array"===c(b)||(-1===a.indexOf(".")?p(b,a,g):w(b,a,g))}var d=a.META_KEY,h=a.GUID_KEY,
c=a.typeOf,b=a.generateGuid,g=m.removeChainWatcher;a=m.flushPendingChains;var p=n.watchKey,u=n.unwatchKey,w=f.watchPath,s=f.unwatchPath;l.watch=k;l.isWatching=function(b,a){var c=b[d];return 0<(c&&c.watching[a])};k.flushPending=a;l.unwatch=function(b,a,g){"length"===a&&"array"===c(b)||(-1===a.indexOf(".")?u(b,a,g):s(b,a,g))};l.rewatch=function(a){var c=a[d],g=c&&c.chains;h in a&&!a.hasOwnProperty(h)&&b(a);g&&g.value()!==a&&(c.chains=g.copy(a))};var q=[];l.destroy=function(b){var a=b[d],c;if(a&&(b[d]=
null,b=a.chains))for(q.push(b);0<q.length;){b=q.pop();if(a=b._chains)for(c in a)a.hasOwnProperty(c)&&q.push(a[c]);b._watching&&(a=b._object)&&g(a,b._key,b)}}});t("ember-routing","ember-handlebars ember-metal/core ember-routing/ext/run_loop ember-routing/ext/controller ember-routing/ext/view ember-routing/helpers/shared ember-routing/helpers/link_to ember-routing/location/api ember-routing/location/none_location ember-routing/location/hash_location ember-routing/location/history_location ember-routing/location/auto_location ember-routing/system/controller_for ember-routing/system/dsl ember-routing/system/router ember-routing/system/route ember-routing/helpers/outlet ember-routing/helpers/render ember-routing/helpers/action exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r,v,y){a=a["default"];m=m["default"];n=k.resolvePaths;k=k.resolveParams;f=d.deprecatedLinkToHelper;l=d.linkToHelper;d=d.LinkView;c=c["default"];b=b["default"];g=g["default"];p=p["default"];var A=u.controllerFor,x=u.generateControllerFactory;u=u.generateController;w=w["default"];s=s["default"];q=q["default"];var G=e.outletHelper;e=e.OutletView;r=r["default"];var B=v.ActionHelper;v=v.actionHelper;m.Location=h["default"];m.AutoLocation=p;m.HashLocation=b;m.HistoryLocation=
g;m.NoneLocation=c;m.controllerFor=A;m.generateControllerFactory=x;m.generateController=u;m.RouterDSL=w;m.Router=s;m.Route=q;m.LinkView=d;s.resolveParams=k;s.resolvePaths=n;a.ActionHelper=B;a.OutletView=e;a.registerHelper("render",r);a.registerHelper("action",v);a.registerHelper("outlet",G);a.registerHelper("link-to",l);a.registerHelper("linkTo",f);y["default"]=m});t("ember-routing/ext/controller","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/enumerable_utils ember-runtime/controllers/controller exports".split(" "),
function(a,m,n,f,l,k){var d=a["default"],h=m.get;a=l.ControllerMixin;a.reopen({transitionToRoute:function(){var a=h(this,"target");return(a.transitionToRoute||a.transitionTo).apply(a,arguments)},transitionTo:function(){d.deprecate("transitionTo is deprecated. Please use transitionToRoute.");return this.transitionToRoute.apply(this,arguments)},replaceRoute:function(){var a=h(this,"target");return(a.replaceRoute||a.replaceWith).apply(a,arguments)},replaceWith:function(){d.deprecate("replaceWith is deprecated. Please use replaceRoute.");
return this.replaceRoute.apply(this,arguments)}});d.FEATURES.isEnabled("query-params-new")&&a.reopen({concatenatedProperties:["queryParams"],queryParams:null,_finalizingQueryParams:!1,_queryParamChangesDuringSuspension:null});k["default"]=a});t("ember-routing/ext/run_loop",["ember-metal/run_loop"],function(a){a["default"]._addQueue("routerTransitions","actions")});t("ember-routing/ext/view",["ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-views/views/view","exports"],
function(a,m,n,f,l){var k=a.get,d=m.set,h=n["default"];a=f.View;a.reopen({init:function(){d(this,"_outlets",{});this._super()},connectOutlet:function(a,b){this._pendingDisconnections&&delete this._pendingDisconnections[a];if(this._hasEquivalentView(a,b))b.destroy();else{var g=k(this,"_outlets"),f=k(this,"container"),f=f&&f.lookup("router:main"),h=k(b,"renderedName");d(g,a,b);f&&h&&f._connectActiveView(h,b)}},_hasEquivalentView:function(a,b){var g=k(this,"_outlets."+a);return g&&g.constructor===b.constructor&&
g.get("template")===b.get("template")&&g.get("context")===b.get("context")},disconnectOutlet:function(a){this._pendingDisconnections||(this._pendingDisconnections={});this._pendingDisconnections[a]=!0;h.once(this,"_finishDisconnections")},_finishDisconnections:function(){if(!this.isDestroyed){var a=k(this,"_outlets"),b=this._pendingDisconnections;this._pendingDisconnections=null;for(var g in b)d(a,g,null)}}});l["default"]=a});t("ember-routing/helpers/action","ember-metal/core ember-metal/property_get ember-metal/array ember-metal/run_loop ember-views/system/utils ember-routing/system/router ember-handlebars ember-handlebars/ext ember-handlebars/helpers/view ember-routing/helpers/shared exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g){function p(b,a){var c=[];a&&c.push(a);var e=b.options.types.slice(1);return c.concat(r(b.context,b.params,{types:e,data:b.options.data}))}var u=a["default"],w=n.forEach,s=f["default"],q=l.isSimpleClick,e=h.handlebarsGet,r=b.resolveParams,v=d["default"].SafeString,y=Array.prototype.slice,A={registeredActions:{}};g.ActionHelper=A;var x=["alt","shift","meta","ctrl"],G=/^click|mouse|touch/,B=function(b,a){if("undefined"===typeof a){if(G.test(b.type))return q(b);a=""}if(0<=
a.indexOf("any"))return!0;var c=!0;w.call(x,function(e){b[e+"Key"]&&-1===a.indexOf(e)&&(c=!1)});return c};A.registerAction=function(b,a,c){var g=++u.uuid;A.registeredActions[g]={eventName:a.eventName,handler:function(g){if(!B(g,c))return!0;!1!==a.preventDefault&&g.preventDefault();!1===a.bubbles&&g.stopPropagation();var d=a.target,f=a.parameters,q,d=d.target?e(d.root,d.target,d.options):d.root;if(a.boundProperty&&(q=r(f.context,[b],{types:["ID"],data:f.options.data})[0],"undefined"===typeof q||"function"===
typeof q))u.assert("You specified a quoteless path to the {{action}} helper '"+b+"' which did not resolve to an actionName. Perhaps you meant to use a quoted actionName? (e.g. {{action '"+b+"'}}).",!0),q=b;q||(q=b);s(function(){d.send?d.send.apply(d,p(f,q)):(u.assert("The action '"+q+"' did not exist on "+d,"function"===typeof d[q]),d[q].apply(d,p(f)))})}};a.view.on("willClearRender",function(){delete A.registeredActions[g]});return g};g.actionHelper=function(b){var a=arguments[arguments.length-1],
c=y.call(arguments,1,-1),e=a.hash,g=a.data.keywords.controller,a={eventName:e.on||"click",parameters:{context:this,options:a,params:c},view:a.data.view,bubbles:e.bubbles,preventDefault:e.preventDefault,target:{options:a},boundProperty:"ID"===a.types[0]};e.target?(a.target.root=this,a.target.target=e.target):g&&(a.target.root=g);e=A.registerAction(b,a,e.allowedKeys);return new v('data-ember-action="'+e+'"')}});t("ember-routing/helpers/link_to","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/merge ember-metal/run_loop ember-metal/computed ember-runtime/system/lazy_load ember-runtime/system/string ember-runtime/system/object ember-runtime/keys ember-views/system/utils ember-views/views/component ember-handlebars ember-handlebars/helpers/view ember-routing/system/router ember-routing/helpers/shared exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e){function r(b,a){var c=b.parameters,e=x(b,"queryParamsObject"),g={};e&&G(g,e.values);for(var d=x(b,"resolvedParams"),d=x(b,"router")._queryParamsFor(d[0]).qps,f={},r=0,q=d.length;r<q;++r){var p=d[r],h=null,k;p.prop in g?(k=g[p.prop],h=e.types[p.prop],delete g[p.prop]):p.urlKey in g&&(k=g[p.urlKey],h=e.types[p.urlKey],delete g[p.urlKey]);h?("ID"===h&&(k=t.normalizePath(c.context,k,c.options.data),k=t.get(k.root,k.path,c.options)),k=p.route.serializeQueryParam(k,
p.urlKey,p.type)):k=p.svalue;a&&k===p.sdef||(f[p.urlKey]=k)}return f}function v(b){var a=b.get("routeArgs");if(!a[a.length-1].queryParams)return a;a=a.slice();a[a.length-1]={queryParams:r(b,!0)};return a}function y(b){var a=I.call(arguments,-1)[0],c=I.call(arguments,0,-1),e=a.hash;c[c.length-1]instanceof N&&(e.queryParamsObject=c.pop());e.disabledBinding=e.disabledWhen;if(!a.fn){var g=c.shift(),d=this;"ID"===a.types.shift()?(a.linkTextPath=g,a.fn=function(){return t.getEscaped(d,g,a)}):a.fn=function(){return g}}e.parameters=
{context:this,options:a,params:c};a.helperName=a.helperName||"link-to";return H.call(this,z,a)}var A=a["default"],x=m.get,G=f["default"],B=l["default"];a=k.computed;var C=h.fmt;h=c["default"];var E=b["default"],M=g.isSimpleClick;b=p["default"];var t=u["default"],H=w.viewHelper,K=q.resolveParams,Q=q.resolvePaths,I=[].slice;S("ember-handlebars");var N=h.extend({values:null}),z=A.LinkView=b.extend({tagName:"a",currentWhen:null,title:null,rel:null,activeClass:"active",loadingClass:"loading",disabledClass:"disabled",
_isDisabled:!1,replace:!1,attributeBindings:["href","title","rel"],classNameBindings:["active","loading","disabled"],eventName:"click",init:function(){this._super.apply(this,arguments);var b=x(this,"eventName");this.on(b,this,this._invoke)},_paramsChanged:function(){this.notifyPropertyChange("resolvedParams")},_setupPathObservers:function(){var b=this.parameters,a=b.options.linkTextPath,c;c=Q(b.context,b.params,{types:b.options.types,data:b.options.data});var e=c.length,g;a&&(a=t.normalizePath(b.context,
a,b.options.data),this.registerObserver(a.root,a.path,this,this.rerender));for(g=0;g<e;g++)a=c[g],null!==a&&(a=t.normalizePath(b.context,a,b.options.data),this.registerObserver(a.root,a.path,this,this._paramsChanged));if(c=this.queryParamsObject){var e=c.values,d;for(d in e)e.hasOwnProperty(d)&&"ID"===c.types[d]&&(a=t.normalizePath(b.context,e[d],b.options.data),this.registerObserver(a.root,a.path,this,this._paramsChanged))}},afterRender:function(){this._super.apply(this,arguments);this._setupPathObservers()},
disabled:a(function(b,a){void 0!==a&&this.set("_isDisabled",a);return a?x(this,"disabledClass"):!1}),active:a(function(){if(x(this,"loading"))return!1;var b=x(this,"router"),a=x(this,"routeArgs"),c=a.slice(1);x(this,"resolvedParams");for(var e=this.currentWhen||a[0],g=b.router.recognizer.handlersFor(e),d=0,f=0,r=g.length;f<r&&!(d+=g[f].names.length,g[f].handler===e);f++);A.FEATURES.isEnabled("query-params-new")&&(d+=1);c.length>d&&(e=a[0]);if(b.isActive.apply(b,[e].concat(c)))return x(this,"activeClass")}).property("resolvedParams",
"routeArgs"),loading:a(function(){if(!x(this,"routeArgs"))return x(this,"loadingClass")}).property("routeArgs"),router:a(function(){return x(this,"controller").container.lookup("router:main")}),_invoke:function(b){if(!M(b))return!0;if(!1!==this.preventDefault)if(A.FEATURES.isEnabled("ember-routing-linkto-target-attribute")){var a=x(this,"target");(!a||"_self"===a)&&b.preventDefault()}else b.preventDefault();!1===this.bubbles&&b.stopPropagation();if(x(this,"_isDisabled"))return!1;if(x(this,"loading"))return A.Logger.warn("This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid."),
!1;b=x(this,"router");a=x(this,"routeArgs");a=x(this,"replace")?b.replaceWith.apply(b,a):b.transitionTo.apply(b,a);b=b.router.generate.apply(b.router,v(this));B.scheduleOnce("routerTransitions",this,this._eagerUpdateUrl,a,b)},_eagerUpdateUrl:function(b,a){if(b.isActive&&b.urlMethod){0===a.indexOf("#")&&(a=a.slice(1));var c=x(this,"router.router");"update"===b.urlMethod?c.updateURL(a):"replace"===b.urlMethod&&c.replaceURL(a);b.method(null)}},resolvedParams:a(function(){var b=this.parameters,a=b.options,
c=a.types,a=a.data;return 0===b.params.length?(b=this.container.lookup("controller:application"),[x(b,"currentRouteName")]):K(b.context,b.params,{types:c,data:a})}).property("router.url"),routeArgs:a(function(){var b=x(this,"resolvedParams").slice(0),a=x(this,"router"),c=b[0];if(c){A.assert(C("The attempt to link-to route '%@' failed. The router did not find '%@' in its possible routes: '%@'",[c,c,E(a.router.recognizer.names).join("', '")]),a.hasRoute(c));a=a.router.recognizer.handlersFor(c);c!==
a[a.length-1].handler&&(this.currentWhen||this.set("currentWhen",c),c=a[a.length-1].handler,b[0]=c);c=1;for(a=b.length;c<a;++c){var e=b[c];if(null===e||"undefined"===typeof e)return}A.FEATURES.isEnabled("query-params-new")&&b.push({queryParams:x(this,"queryParams")});return b}}).property("resolvedParams","queryParams"),queryParamsObject:null,queryParams:a(function(){return r(this,!1)}).property("resolvedParams.[]"),href:a(function(){if("a"===x(this,"tagName")){var b=x(this,"router"),a=x(this,"routeArgs");
if(!a)return x(this,"loadingHref");A.FEATURES.isEnabled("query-params-new")&&(a=v(this));return b.generate.apply(b,a)}}).property("routeArgs"),loadingHref:"#"});z.toString=function(){return"LinkView"};A.FEATURES.isEnabled("ember-routing-linkto-target-attribute")&&z.reopen({attributeBindings:["target"],target:null});A.FEATURES.isEnabled("query-params-new")&&t.registerHelper("query-params",function(b){A.assert(C("The `query-params` helper only accepts hash parameters, e.g. (query-params queryParamPropertyName='%@') as opposed to just (query-params '%@')",
[b,b]),1===arguments.length);return N.create({values:b.hash,types:b.hashTypes})});e.LinkView=z;e.deprecatedLinkToHelper=function(){A.warn("The 'linkTo' view helper is deprecated in favor of 'link-to'");return y.apply(this,arguments)};e.linkToHelper=y});t("ember-routing/helpers/outlet","ember-metal/core ember-metal/property_get ember-metal/property_set ember-runtime/system/lazy_load ember-views/views/container_view ember-handlebars/views/metamorph_view ember-handlebars/helpers/view exports".split(" "),
function(a,m,n,f,l,k,d,h){var c=a["default"],b=d.viewHelper,g=l["default"].extend(k._Metamorph);h.OutletView=g;h.outletHelper=function(a,d){var f,h,q,e;a&&(a.data&&a.data.isRenderData)&&(d=a,a="main");h=d.data.view.container;for(f=d.data.view;!f.get("template.isTop");)f=f.get("_parentView");if(q=d.hash.view)e="view:"+q,c.assert("Using a quoteless view parameter with {{outlet}} is not supported. Please update to quoted usage '{{outlet \""+q+'"}}.',"ID"!==d.hashTypes.view),c.assert("The view name you supplied '"+
q+"' did not resolve to a view.",h.has(e));h=q?h.lookupFactory(e):d.hash.viewClass||g;d.data.view.set("outletSource",f);d.hash.currentViewBinding="_view.outletSource._outlets."+a;d.helperName=d.helperName||"outlet";return b.call(this,h,d)}});t("ember-routing/helpers/render","ember-metal/core ember-metal/error ember-metal/property_get ember-metal/property_set ember-runtime/system/string ember-routing/system/controller_for ember-handlebars/ext ember-handlebars/helpers/view exports".split(" "),function(a,
m,n,f,l,k,d,h,c){var b=a["default"],g=m["default"],p=l.camelize,u=k.generateControllerFactory,w=k.generateController,s=d.handlebarsGet,q=h.viewHelper;c["default"]=function(a,c,d){var f=arguments.length,h,k,l,m,n;h=(d||c).data.keywords.controller.container;k=h.lookup("router:main");if(2===f)d=c,c=void 0,b.assert('You can only use the {{render}} helper once without a model object as its second argument, as in {{render "post" post}}.',!k||!k._lookupActiveView(a));else if(3===f)n=s(d.contexts[1],c,d);
else throw new g("You must pass a templateName to render");b.deprecate("Using a quoteless parameter with {{render}} is deprecated. Please update to quoted usage '{{render \""+a+'"}}.',"ID"!==d.types[0]);a=a.replace(/\//g,".");m=h.lookup("view:"+a)||h.lookup("view:default");var E=d.hash.controller||a,M="controller:"+E;d.hash.controller&&b.assert("The controller name you supplied '"+E+"' did not resolve to a controller.",h.has(M));var t=d.data.keywords.controller;2<f?(l=(h.lookupFactory(M)||u(h,E,n)).create({model:n,
parentController:t,target:t}),m.one("willDestroyElement",function(){l.destroy()})):(l=h.lookup(M)||w(h,E),l.setProperties({target:t,parentController:t}));var H=d.contexts[1];H&&m.registerObserver(H,c,function(){l.set("model",s(H,c,d))});d.hash.viewName=p(a);f="template:"+a;b.assert("You used `{{render '"+a+"'}}`, but '"+a+"' can not be found as either a template or a view.",h.has("view:"+a)||h.has(f)||d.fn);d.hash.template=h.lookup(f);d.hash.controller=l;k&&!n&&k._connectActiveView(a,m);d.helperName=
d.helperName||'render "'+a+'"';q.call(this,m,d)}});t("ember-routing/helpers/shared","ember-metal/property_get ember-metal/array ember-runtime/system/lazy_load ember-runtime/controllers/controller ember-routing/system/router ember-handlebars/ext exports".split(" "),function(a,m,n,f,l,k,d){function h(a,d,f){function e(b,a){return"controller"===a?a:g.detect(b)?e(c(b,"model"),a?a+".model":"model"):a}a=p(a,d,f);var r=f.types;return b.call(a,function(b,a){return"ID"===r[a]?e(b,d[a]):null})}var c=a.get,
b=m.map,g=f.ControllerMixin,p=k.resolveParams,u=k.handlebarsGet;d.resolveParams=function(a,c,g){return b.call(h(a,c,g),function(b,d){return null===b?c[d]:u(a,b,g)})};d.resolvePaths=h});t("ember-routing/location/api",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","exports"],function(a,m,n,f){var l=a["default"];f["default"]={create:function(a){var d=a&&a.implementation;l.assert("Ember.Location.create: you must specify a 'implementation' option",!!d);var f=this.implementations[d];
l.assert("Ember.Location.create: "+d+" is not a valid implementation",!!f);return f.create.apply(f,arguments)},registerImplementation:function(a,d){l.deprecate("Using the Ember.Location.registerImplementation is no longer supported. Register your custom location implementation with the container instead.",!1);this.implementations[a]=d},implementations:{},_location:window.location,_getHash:function(){var a=(this._location||this.location).href,d=a.indexOf("#");return-1===d?"":a.substr(d)}}});t("ember-routing/location/auto_location",
"ember-metal/core ember-metal/property_get ember-metal/property_set ember-routing/location/api ember-routing/location/history_location ember-routing/location/hash_location ember-routing/location/none_location exports".split(" "),function(a,m,n,f,l,k,d,h){var c=a["default"],b=n.set;h["default"]={cancelRouterSetup:!1,rootURL:"/",_window:window,_location:window.location,_history:window.history,_HistoryLocation:l["default"],_HashLocation:k["default"],_NoneLocation:d["default"],_getOrigin:function(){var b=
this._location,a=b.origin;a||(a=b.protocol+"//"+b.hostname,b.port&&(a+=":"+b.port));return a},_getSupportsHistory:function(){var b=this._window.navigator.userAgent;return-1!==b.indexOf("Android 2")&&-1!==b.indexOf("Mobile Safari")&&-1===b.indexOf("Chrome")?!1:!!(this._history&&"pushState"in this._history)},_getSupportsHashChange:function(){var b=this._window,a=b.document.documentMode;return"onhashchange"in b&&(void 0===a||7<a)},_replacePath:function(b){this._location.replace(this._getOrigin()+b)},
_getRootURL:function(){return this.rootURL},_getPath:function(){var b=this._location.pathname;"/"!==b.charAt(0)&&(b="/"+b);return b},_getHash:f["default"]._getHash,_getQuery:function(){return this._location.search},_getFullPath:function(){return this._getPath()+this._getQuery()+this._getHash()},_getHistoryPath:function(){var b=this._getRootURL(),a=this._getPath(),d=this._getHash(),f=this._getQuery(),h=a.indexOf(b);c.assert("Path "+a+" does not start with the provided rootURL "+b,0===h);"#/"===d.substr(0,
2)?(d=d.substr(1).split("#"),b=d.shift(),"/"===a.slice(-1)&&(b=b.substr(1)),a=a+b+f,d.length&&(a+="#"+d.join("#"))):(a+=f,a+=d);return a},_getHashPath:function(){var b=this._getRootURL(),a=b,b=this._getHistoryPath().substr(b.length);""!==b&&("/"!==b.charAt(0)&&(b="/"+b),a+="#"+b);return a},create:function(a){a&&a.rootURL&&(c.assert('rootURL must end with a trailing forward slash e.g. "/app/"',"/"===a.rootURL.charAt(a.rootURL.length-1)),this.rootURL=a.rootURL);var d,f=!1,h=this._NoneLocation,k=this._getFullPath();
this._getSupportsHistory()?(d=this._getHistoryPath(),k===d?h=this._HistoryLocation:(f=!0,this._replacePath(d))):this._getSupportsHashChange()&&(d=this._getHashPath(),k===d||"/"===k&&"/#/"===d?h=this._HashLocation:(f=!0,this._replacePath(d)));h=h.create.apply(h,arguments);f&&b(h,"cancelRouterSetup",!0);return h}}});t("ember-routing/location/hash_location","ember-metal/property_get ember-metal/property_set ember-metal/run_loop ember-metal/utils ember-runtime/system/object ember-routing/location/api ember-views/system/jquery exports".split(" "),
function(a,m,n,f,l,k,d,h){var c=a.get,b=m.set,g=n["default"],p=f.guidFor,u=d["default"];h["default"]=l["default"].extend({implementation:"hash",init:function(){b(this,"location",c(this,"_location")||window.location)},getHash:k["default"]._getHash,getURL:function(){return this.getHash().substr(1)},setURL:function(a){c(this,"location").hash=a;b(this,"lastSetURL",a)},replaceURL:function(a){c(this,"location").replace("#"+a);b(this,"lastSetURL",a)},onUpdateURL:function(a){var d=this,f=p(this);u(window).on("hashchange.ember-location-"+
f,function(){g(function(){var e=d.getURL();c(d,"lastSetURL")!==e&&(b(d,"lastSetURL",null),a(e))})})},formatURL:function(b){return"#"+b},willDestroy:function(){var b=p(this);u(window).off("hashchange.ember-location-"+b)}})});t("ember-routing/location/history_location","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-runtime/system/object ember-views/system/jquery exports".split(" "),function(a,m,n,f,l,k,d){var h=a["default"],c=m.get,b=n.set,g=f.guidFor,p=
k["default"],u=!1,w=window.history&&"state"in window.history;d["default"]=l["default"].extend({implementation:"history",init:function(){b(this,"location",c(this,"location")||window.location);b(this,"baseURL",p("base").attr("href")||"")},initState:function(){b(this,"history",c(this,"history")||window.history);this.replaceState(this.formatURL(this.getURL()))},rootURL:"/",getURL:function(){var b=c(this,"rootURL"),a=c(this,"location"),e=a.pathname,g=c(this,"baseURL"),b=b.replace(/\/$/,""),g=g.replace(/\/$/,
""),b=e.replace(g,"").replace(b,"");h.FEATURES.isEnabled("query-params-new")&&(b+=a.search||"");return b},setURL:function(b){var a=this.getState();b=this.formatURL(b);(!a||a.path!==b)&&this.pushState(b)},replaceURL:function(b){var a=this.getState();b=this.formatURL(b);(!a||a.path!==b)&&this.replaceState(b)},getState:function(){return w?c(this,"history").state:this._historyState},pushState:function(b){var a={path:b};c(this,"history").pushState(a,null,b);w||(this._historyState=a);this._previousURL=
this.getURL()},replaceState:function(b){var a={path:b};c(this,"history").replaceState(a,null,b);w||(this._historyState=a);this._previousURL=this.getURL()},onUpdateURL:function(b){var a=g(this),c=this;p(window).on("popstate.ember-location-"+a,function(a){if(!u&&(u=!0,c.getURL()===c._previousURL))return;b(c.getURL())})},formatURL:function(b){var a=c(this,"rootURL"),e=c(this,"baseURL");""!==b?(a=a.replace(/\/$/,""),e=e.replace(/\/$/,"")):e.match(/^\//)&&a.match(/^\//)&&(e=e.replace(/\/$/,""));return e+
a+b},willDestroy:function(){var b=g(this);p(window).off("popstate.ember-location-"+b)}})});t("ember-routing/location/none_location",["ember-metal/property_get","ember-metal/property_set","ember-runtime/system/object","exports"],function(a,m,n,f){var l=a.get,k=m.set;f["default"]=n["default"].extend({implementation:"none",path:"",getURL:function(){return l(this,"path")},setURL:function(a){k(this,"path",a)},onUpdateURL:function(a){this.updateCallback=a},handleURL:function(a){k(this,"path",a);this.updateCallback(a)},
formatURL:function(a){return a}})});t("ember-routing/system/controller_for",["ember-metal/core","ember-metal/property_get","ember-metal/utils","exports"],function(a,m,n,f){function l(a,b,g){g=g&&h(g)?"array":g?"object":"basic";g=a.lookupFactory("controller:"+g).extend({isGenerated:!0,toString:function(){return"(generated "+b+" controller)"}});a.register("controller:"+b,g);return g}var k=a["default"],d=m.get,h=n.isArray;f.controllerFor=function(a,b,g){return a.lookup("controller:"+b,g)};f.generateControllerFactory=
l;f.generateController=function(a,b,g){l(a,b,g);b="controller:"+b;a=a.lookup(b);d(a,"namespace.LOG_ACTIVE_GENERATION")&&k.Logger.info("generated -> "+b,{fullName:b});return a}});t("ember-routing/system/dsl",["ember-metal/core","exports"],function(a,m){function n(a){this.parent=a;this.matches=[]}function f(a,d,f){l.assert("You must use `this.resource` to nest","function"!==typeof f);f=f||{};"string"!==typeof f.path&&(f.path="/"+d);a.parent&&"application"!==a.parent&&(d=a.parent+"."+d);a.push(f.path,
d,null)}var l=a["default"];m["default"]=n;n.prototype={resource:function(a,d,h){l.assert("'basic' cannot be used as a resource name.","basic"!==a);2===arguments.length&&"function"===typeof d&&(h=d,d={});1===arguments.length&&(d={});"string"!==typeof d.path&&(d.path="/"+a);var c=!1;l.FEATURES.isEnabled("ember-routing-consistent-resources")?c=!0:h&&(c=!0);c?(c=new n(a),f(c,"loading"),f(c,"error",{path:"/_unused_dummy_error_path_route_"+a+"/:error"}),h&&h.call(c),this.push(d.path,a,c.generate())):this.push(d.path,
a,null);l.FEATURES.isEnabled("ember-routing-named-substates")&&(a=a.split(".").pop(),f(this,a+"_loading"),f(this,a+"_error",{path:"/_unused_dummy_error_path_route_"+a+"/:error"}))},push:function(a,d,f){var c=d.split(".");if(""===a||"/"===a||"index"===c[c.length-1])this.explicitIndex=!0;this.matches.push([a,d,f])},route:function(a,d){l.assert("'basic' cannot be used as a route name.","basic"!==a);f(this,a,d);l.FEATURES.isEnabled("ember-routing-named-substates")&&(f(this,a+"_loading"),f(this,a+"_error",
{path:"/_unused_dummy_error_path_route_"+a+"/:error"}))},generate:function(){var a=this.matches;this.explicitIndex||this.route("index",{path:"/"});return function(d){for(var f=0,c=a.length;f<c;f++){var b=a[f];d(b[0]).to(b[1],b[2])}}}};n.map=function(a){var d=new n;a.call(d);return d}});t("ember-routing/system/route","ember-metal/core ember-metal/error ember-metal/property_get ember-metal/property_set ember-metal/get_properties ember-metal/enumerable_utils ember-metal/is_none ember-metal/computed ember-metal/utils ember-metal/run_loop ember-runtime/keys ember-runtime/copy ember-runtime/system/string ember-runtime/system/object ember-runtime/mixins/action_handler ember-routing/system/controller_for exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e){function r(a){a:{var b=a.router.router.state.handlerInfos;if(b)for(var c,e,g=0,d=b.length;g<d;g++){e=b[g].handler;if(e===a){a=c;break a}c=e}a=void 0}var f;if(a)return(f=a.lastRenderedTemplate)?f:r(a)}function v(a){return function(){a.destroy()}}function y(a,b){return function(){a.disconnectOutlet(b)}}function A(a,b,c){var e=B(b,"queryParams"),g,d=c?"addObserver":"removeObserver";c=0;for(g=e.length;c<g;++c){var f=e[c].split(":")[0];b[d](f,a,a._qpChanged);
b[d](f+".[]",a,a._qpChanged)}}var x=a["default"],G=m["default"],B=n.get,C=f.set,E=l["default"];a=k["default"];var t=d.isNone;d=h.computed;var L=c.typeOf,H=b["default"],K=g["default"],Q=p["default"],I=u.classify,N=q.generateController,z=a.forEach,F=a.replace;c=w["default"].extend(s["default"],{exit:function(){x.FEATURES.isEnabled("query-params-new")&&A(this,this.controller,!1);this.deactivate();this.teardownViews()},enter:function(){this.activate()},viewName:null,templateName:null,controllerName:null,
_actions:{queryParamsDidChange:function(a,b,c){if(x.FEATURES.isEnabled("query-params-new")){a=K(a).concat(K(c));b=0;for(c=a.length;b<c;++b){var e=B(this.queryParams,a[b])||{};B(e,"refreshModel")&&this.refresh()}return!0}},finalizeQueryParamChange:function(a,b,c){if(x.FEATURES.isEnabled("query-params-new")){var e=this.controller,g=e._queryParamChangesDuringSuspension,d=B(this,"_qp");if(d){for(var f=0,r=d.qps.length;f<r;++f){var q=d.qps[f],p=q.urlKey in a,h;g&&q.urlKey in g?(p=B(e,q.prop),h=this.serializeQueryParam(p,
q.urlKey,q.type)):p?(h=a[q.urlKey],p=this.deserializeQueryParam(h,q.urlKey,q.type)):(h=q.sdef,p=q.def);delete a[q.urlKey];if(h!==q.svalue){var k=B(this.queryParams,q.urlKey)||{};!c.targetName&&B(k,"replace")&&c.method("replace");q.svalue=h;q.value=p;e._finalizingQueryParams=!0;C(e,q.prop,q.value);e._finalizingQueryParams=!1}b.push({value:q.svalue,visible:q.svalue!==q.sdef,key:q.urlKey})}e._queryParamChangesDuringSuspension=null}return!0}}},events:null,mergedProperties:["events"],deactivate:x.K,activate:x.K,
transitionTo:function(a,b){var c=this.router;return c.transitionTo.apply(c,arguments)},intermediateTransitionTo:function(){var a=this.router;a.intermediateTransitionTo.apply(a,arguments)},refresh:function(){return this.router.router.refresh(this)},replaceWith:function(){var a=this.router;return a.replaceWith.apply(a,arguments)},send:function(){return this.router.send.apply(this.router,arguments)},setup:function(a,b){var c=this.controllerName||this.routeName,e=this.controllerFor(c,!0);e||(e=this.generateController(c,
a));this.controller=e;x.FEATURES.isEnabled("query-params-new")&&A(this,e,!0);this.setupControllers?(x.deprecate("Ember.Route.setupControllers is deprecated. Please use Ember.Route.setupController(controller, model) instead."),this.setupControllers(e,a)):x.FEATURES.isEnabled("query-params-new")?(e._finalizingQueryParams=!0,e._queryParamChangesDuringSuspension={},this.setupController(e,a,b),e._finalizingQueryParams=!1):this.setupController(e,a);this.renderTemplates?(x.deprecate("Ember.Route.renderTemplates is deprecated. Please use Ember.Route.renderTemplate(controller, model) instead."),
this.renderTemplates(a)):this.renderTemplate(e,a)},beforeModel:x.K,afterModel:x.K,redirect:x.K,contextDidChange:function(){this.currentModel=this.context},model:function(a,b){var c,e,g,d;x.FEATURES.isEnabled("query-params-new")&&(d=B(this,"_qp.map"));for(var f in a)if(!("queryParams"===f||d&&f in d)){if(c=f.match(/^(.*)_id$/))e=c[1],g=a[f];c=!0}return!e&&c?Q(a):!e?b.resolveIndex!==b.state.handlerInfos.length-1?void 0:b.state.handlerInfos[b.resolveIndex-1].context:this.findModel(e,g)},deserialize:function(a,
b){return x.FEATURES.isEnabled("query-params-new")?this.model(this.paramsFor(this.routeName),b):this.model(a,b)},findModel:function(){var a=B(this,"store");return a.find.apply(a,arguments)},store:d(function(){var a=this.container,b=this.routeName,c=B(this,"router.namespace");return{find:function(e,g){var d=a.lookupFactory("model:"+e);x.assert("You used the dynamic segment "+e+"_id in your route "+b+", but "+c+"."+I(e)+" did not exist and you did not override your route's `model` hook.",d);if(d)return x.assert(I(e)+
" has no method `find`.","function"===typeof d.find),d.find(g)}}}),serialize:function(a,b){if(!(1>b.length)&&a){var c=b[0],e={};/_id$/.test(c)&&1===b.length?e[c]=B(a,"id"):e=E(a,b);return e}},setupController:function(a,b,c){a&&void 0!==b&&C(a,"model",b)},controllerFor:function(a,b){var c=this.container,e=c.lookup("route:"+a);e&&e.controllerName&&(a=e.controllerName);c=c.lookup("controller:"+a);x.assert("The controller named '"+a+"' could not be found. Make sure that this route exists and has already been entered at least once. If you are accessing a controller not associated with a route, make sure the controller class is explicitly defined.",
c||!0===b);return c},generateController:function(a,b){var c=this.container;b=b||this.modelFor(a);return N(c,a,b)},modelFor:function(a){var b=this.container.lookup("route:"+a),c=this.router?this.router.router.activeTransition:null;return c&&(a=b&&b.routeName||a,c.resolvedModels.hasOwnProperty(a))?c.resolvedModels[a]:b&&b.currentModel},renderTemplate:function(a,b){this.render()},render:function(a,b){x.assert("The name in the given arguments is undefined",0<arguments.length?!t(arguments[0]):!0);var c=
"string"===typeof a&&!!a;"object"===typeof a&&!b&&(b=a,a=this.routeName);b=b||{};var e;a?e=a=a.replace(/\//g,"."):(a=this.routeName,e=this.templateName||a);var g=this.container,d=(c=g.lookup("view:"+(b.view||c&&a||this.viewName||a)))?c.get("template"):null;d||(d=g.lookup("template:"+e));if(!c&&!d)x.assert('Could not find "'+a+'" template or view.',x.isEmpty(arguments[0])),B(this.router,"namespace.LOG_VIEW_LOOKUPS")&&x.Logger.info('Could not find "'+a+'" template or view. Nothing will be rendered',
{fullName:"template:"+a});else{e=a;var f=d,d=b||{};d.into=d.into?d.into.replace(/\//g,"."):r(this);d.outlet=d.outlet||"main";d.name=e;d.template=f;d.LOG_VIEW_LOOKUPS=B(this.router,"namespace.LOG_VIEW_LOOKUPS");x.assert("An outlet ("+d.outlet+") was specified but was not found.","main"===d.outlet||d.into);var f=d.controller,q=d.model,p,f=d.controller?d.controller:(p=this.container.lookup("controller:"+e))?p:this.controllerName||this.routeName;if("string"===typeof f&&(p=f,f=this.container.lookup("controller:"+
p),!f))throw new G("You passed `controller: '"+p+"'` into the `render` method, but no such controller could be found.");q&&f.set("model",q);d.controller=f;p=b=d;c?p.LOG_VIEW_LOOKUPS&&x.Logger.info("Rendering "+p.name+" with "+c,{fullName:"view:"+p.name}):(c=g.lookup(p.into?"view:default":"view:toplevel"),p.LOG_VIEW_LOOKUPS&&x.Logger.info("Rendering "+p.name+" with default view "+c,{fullName:"view:"+p.name}));B(c,"templateName")||(C(c,"template",p.template),C(c,"_debugTemplateName",p.name));C(c,"renderedName",
p.name);C(c,"controller",p.controller);"main"===b.outlet&&(this.lastRenderedTemplate=a);g=c;c=b;c.into?(p=this.router._lookupActiveView(c.into),e=y(p,c.outlet),this.teardownOutletViews||(this.teardownOutletViews=[]),F(this.teardownOutletViews,0,0,[e]),p.connectOutlet(c.outlet,g)):(p=B(this,"router.namespace.rootElement"),this.teardownTopLevelView&&this.teardownTopLevelView(),this.router._connectActiveView(c.name,g),this.teardownTopLevelView=v(g),g.appendTo(p))}},disconnectOutlet:function(a){if(!a||
"string"===typeof a){var b=a;a={};a.outlet=b}a.parentView=a.parentView?a.parentView.replace(/\//g,"."):r(this);a.outlet=a.outlet||"main";(b=this.router._lookupActiveView(a.parentView))&&b.disconnectOutlet(a.outlet)},willDestroy:function(){this.teardownViews()},teardownViews:function(){this.teardownTopLevelView&&this.teardownTopLevelView();z(this.teardownOutletViews||[],function(a){a()});delete this.teardownTopLevelView;delete this.teardownOutletViews;delete this.lastRenderedTemplate}});x.FEATURES.isEnabled("query-params-new")&&
c.reopen({queryParams:{},_qp:d(function(){var a=this.controllerName||this.routeName,b=this.container.normalize("controller:"+a);if(b=this.container.lookupFactory(b)){var b=b.proto(),c=B(b,"queryParams");if(c&&0!==c.length){for(var e=[],g={},d=0,f=c.length;d<f;++d){var r=c[d].split(":"),q=r[0],r=r[1]||q,p=B(b,q),h=L(p),k=this.serializeQueryParam(p,r,h),p={def:p,sdef:k,type:h,urlKey:r,prop:q,ctrl:a,value:p,svalue:k,route:this};g[q]=g[r]=g[a+":"+q]=p;e.push(p)}return{qps:e,map:g}}}}),mergedProperties:["queryParams"],
paramsFor:function(a){var b=this.container.lookup("route:"+a);if(!b)return{};var c=this.router.router.activeTransition;c||(c=this.router.router.state);a=c.params[a]||{};var c=c.queryParams,e=B(b,"_qp");if(!e)return a;for(var g=e.qps,e=e.map,d,f=0,r=g.length;f<r;++f)d=g[f],a[d.urlKey]=d.value;for(var q in c)q in e&&(g=c[q],d=e[q],null===g&&(g=d.sdef),a[q]=b.deserializeQueryParam(g,q,d.type));return a},serializeQueryParam:function(a,b,c){return"array"===c?JSON.stringify(a):""+a},deserializeQueryParam:function(a,
b,c){return"boolean"===c?"true"===a?!0:!1:"number"===c?Number(a).valueOf():"array"===c?x.A(JSON.parse(a)):a},_qpChanged:function(a,b){".[]"===b.slice(b.length-3)&&(b=b.substr(0,b.length-3));var c=B(this,"_qp").map[b];if(a._finalizingQueryParams){var e=a._queryParamChangesDuringSuspension;e&&(e[c.urlKey]=!0)}else e=Q(B(a,b)),this.router._queuedQPChanges[c.prop]=e,H.once(this,this._fireQueryParamTransition)},_fireQueryParamTransition:function(){this.transitionTo({queryParams:this.router._queuedQPChanges});
this.router._queuedQPChanges={}}});e["default"]=c});t("ember-routing/system/router","ember-metal/core ember-metal/error ember-metal/property_get ember-metal/property_set ember-metal/array ember-metal/properties ember-metal/computed ember-metal/merge ember-metal/run_loop ember-metal/enumerable_utils ember-runtime/system/string ember-runtime/system/object ember-runtime/mixins/evented ember-routing/system/dsl ember-views/views/view ember-routing/location/api ember-handlebars/views/metamorph_view exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r){function v(a,b,c){b=b.state.handlerInfos;for(var e=!1,g=b.length-1;0<=g;--g){var d=b[g].handler;if(e){if(!0!==c(d,b[g+1].handler))return!1}else a===d&&(e=!0)}return!0}function y(a,b,c){var e=a.router;b=b.routeName.split(".").pop();a="application"===a.routeName?"":a.routeName+".";if(B.FEATURES.isEnabled("ember-routing-named-substates")&&(b=a+b+"_"+c,A(e,b)))return b;b=a+c;if(A(e,b))return b}function A(a,b){var c=a.container;return a.hasRoute(b)&&(c.has("template:"+
b)||c.has("route:"+b))}function x(a,b,c){var e=c.shift();if(!a){if(b)return;throw new C("Can't trigger action '"+e+"' because your app hasn't finished transitioning into its first route. To trigger an action on destination routes during a transition, you can call `.send()` on the `Transition` object passed to the `model/beforeModel/afterModel` hooks.");}for(var g=!1,d=a.length-1;0<=d;d--){var f=a[d].handler;if(f._actions&&f._actions[e])if(!0===f._actions[e].apply(f,c))g=!0;else return}if(R[e])R[e].apply(null,
c);else if(!g&&!b)throw new C("Nothing handled the action '"+e+"'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.");}function G(a){var b=a.container.lookup("controller:application");if(b){a=a.router.currentHandlerInfos;var c=O._routePath(a);"currentPath"in b||L(b,"currentPath");t(b,"currentPath",c);"currentRouteName"in b||L(b,"currentRouteName");t(b,"currentRouteName",a[a.length-1].name)}}var B=a["default"],
C=m["default"],E=n.get,t=f.set,L=k.defineProperty;a=d.computed;var H=h["default"],K=c["default"];h=p["default"];u=u["default"];var Q=w["default"],I=s.View,N=q["default"],z=e._MetamorphView,F=S("router")["default"];S("router/transition");var P=[].slice,O=h.extend(u,{location:"hash",rootURL:"/",init:function(){this.router=this.constructor.router||this.constructor.map(B.K);this._activeViews={};this._setupLocation();this._qpCache={};this._queuedQPChanges={};E(this,"namespace.LOG_TRANSITIONS_INTERNAL")&&
(this.router.log=B.Logger.debug)},url:a(function(){return E(this,"location").getURL()}),startRouting:function(){var a=this.router=this.router||this.constructor.map(B.K),b=E(this,"location"),c=this.container,e=this,g=E(this,"initialURL");E(b,"cancelRouterSetup")||(this._setupRouter(a,b),c.register("view:default",z),c.register("view:toplevel",I.extend()),b.onUpdateURL(function(a){e.handleURL(a)}),"undefined"===typeof g&&(g=b.getURL()),this.handleURL(g))},didTransition:function(a){G(this);this._cancelLoadingEvent();
this.notifyPropertyChange("url");K.once(this,this.trigger,"didTransition");E(this,"namespace").LOG_TRANSITIONS&&B.Logger.log("Transitioned into '"+O._routePath(a)+"'")},handleURL:function(a){return this._doTransition("handleURL",[a])},transitionTo:function(){return this._doTransition("transitionTo",arguments)},intermediateTransitionTo:function(){this.router.intermediateTransitionTo.apply(this.router,arguments);G(this);var a=this.router.currentHandlerInfos;E(this,"namespace").LOG_TRANSITIONS&&B.Logger.log("Intermediate-transitioned into '"+
O._routePath(a)+"'")},replaceWith:function(){return this._doTransition("replaceWith",arguments)},generate:function(){var a=this.router.generate.apply(this.router,arguments);return this.location.formatURL(a)},isActive:function(a){var b=this.router;return b.isActive.apply(b,arguments)},send:function(a,b){this.router.trigger.apply(this.router,arguments)},hasRoute:function(a){return this.router.hasRoute(a)},reset:function(){this.router.reset()},_lookupActiveView:function(a){return(a=this._activeViews[a])&&
a[0]},_connectActiveView:function(a,b){function c(){delete this._activeViews[a]}var e=this._activeViews[a];e&&e[0].off("willDestroyElement",this,e[1]);this._activeViews[a]=[b,c];b.one("willDestroyElement",this,c)},_setupLocation:function(){var a=E(this,"location"),b=E(this,"rootURL");b&&!this.container.has("-location-setting:root-url")&&this.container.register("-location-setting:root-url",b,{instantiate:!1});if("string"===typeof a&&this.container)var c=this.container.lookup("location:"+a),a="undefined"!==
typeof c?t(this,"location",c):t(this,"location",N.create({implementation:a}));b&&"string"===typeof b&&(a.rootURL=b);"function"===typeof a.initState&&a.initState()},_getHandlerFunction:function(){var a={},b=this.container,c=b.lookupFactory("route:basic"),e=this;return function(g){var d="route:"+g,f=b.lookup(d);if(a[g])return f;a[g]=!0;f||(b.register(d,c.extend()),f=b.lookup(d),E(e,"namespace.LOG_ACTIVE_GENERATION")&&B.Logger.info("generated -> "+d,{fullName:d}));f.routeName=g;return f}},_setupRouter:function(a,
b){var c,e=this;a.getHandler=this._getHandlerFunction();var g=function(){b.setURL(c)};a.updateURL=function(a){c=a;K.once(g)};if(b.replaceURL){var d=function(){b.replaceURL(c)};a.replaceURL=function(a){c=a;K.once(d)}}a.didTransition=function(a){e.didTransition(a)}},_doTransition:function(a,b){b=P.call(b);b[0]=b[0]||"/";var c=b[0],e=!1,g;if(B.FEATURES.isEnabled("query-params-new")){var d=b[b.length-1];d&&d.hasOwnProperty("queryParams")&&(1===b.length&&(e=!0,c=null),g=b[b.length-1].queryParams)}!e&&
"/"!==c.charAt(0)&&B.assert("The route "+c+" was not found",this.router.hasRoute(c));if(g){c||(c=this.router.activeTransition?this.router.activeTransition.state.handlerInfos:this.router.state.handlerInfos,c=c[c.length-1].name,b.unshift(c));var c=this._queryParamsFor(c),e={},f;for(f in g)if(g.hasOwnProperty(f)){var d=g[f],r=c.map[f];if(!r)throw new C("Unrecognized query param "+f+" provided as transition argument");e[r.urlKey]=r.route.serializeQueryParam(d,r.urlKey,r.type)}b[b.length-1].queryParams=
e}g=this.router[a].apply(this.router,b);g.then(null,function(a){if(a&&a.name){if("UnrecognizedURLError"===a.name)B.assert("The URL '"+a.message+"' did not match any routes in your application");else if("TransitionAborted"!==a.name)throw a;return a}},"Ember: Process errors from Router");return g},_queryParamsFor:function(a){if(this._qpCache[a])return this._qpCache[a];var b={},c=[];this._qpCache[a]={map:b,qps:c};var e=this.router;a=e.recognizer.handlersFor(a);for(var g=0,d=a.length;g<d;++g){var f=e.getHandler(a[g].handler);
if(f=E(f,"_qp"))H(b,f.map),c.push.apply(c,f.qps)}return{qps:c,map:b}},_scheduleLoadingEvent:function(a,b){this._cancelLoadingEvent();this._loadingStateTimer=K.scheduleOnce("routerTransitions",this,"_fireLoadingEvent",a,b)},_fireLoadingEvent:function(a,b){this.router.activeTransition&&a.trigger(!0,"loading",a,b)},_cancelLoadingEvent:function(){this._loadingStateTimer&&K.cancel(this._loadingStateTimer);this._loadingStateTimer=null}}),R={willResolveModel:function(a,b){b.router._scheduleLoadingEvent(a,
b)},error:function(a,b,c){var e=c.router;v(c,b,function(b,c){var g=y(b,c,"error");if(g)e.intermediateTransitionTo(g,a);else return!0})&&(A(c.router,"application_error")?e.intermediateTransitionTo("application_error",a):(b=["Error while processing route: "+b.targetName],a&&(a.message&&b.push(a.message),a.stack&&b.push(a.stack),"string"===typeof a&&b.push(a)),B.Logger.error.apply(this,b)))},loading:function(a,b){var c=b.router;v(b,a,function(b,e){var g=y(b,e,"loading");if(g)c.intermediateTransitionTo(g);
else if(a.pivotHandler!==b)return!0})&&A(b.router,"application_loading")&&c.intermediateTransitionTo("application_loading")}};O.reopenClass({router:null,map:function(a){var b=this.router;b||(b=new F,B.FEATURES.isEnabled("ember-routing-will-change-hooks")?b._willChangeContextEvent="willChangeModel":(b._triggerWillChangeContext=B.K,b._triggerWillLeave=B.K),b.callbacks=[],b.triggerEvent=x,this.reopenClass({router:b}));var c=Q.map(function(){this.resource("application",{path:"/"},function(){for(var c=
0;c<b.callbacks.length;c++)b.callbacks[c].call(this);a.call(this)})});b.callbacks.push(a);b.map(c.generate());return b},_routePath:function(a){for(var b=[],c=1,e=a.length;c<e;c++){for(var g=a[c].name.split("."),d=P.call(b);d.length;){var f;a:{f=0;for(var r=d.length;f<r;++f)if(d[f]!==g[f]){f=!1;break a}f=!0}if(f)break;d.shift()}b.push.apply(b,g.slice(d.length))}return b.join(".")}});r["default"]=O});t("ember-runtime","ember-metal ember-runtime/core ember-runtime/keys ember-runtime/compare ember-runtime/copy ember-runtime/system/namespace ember-runtime/system/object ember-runtime/system/tracked_array ember-runtime/system/subarray ember-runtime/system/container ember-runtime/system/application ember-runtime/system/array_proxy ember-runtime/system/object_proxy ember-runtime/system/core_object ember-runtime/system/each_proxy ember-runtime/system/native_array ember-runtime/system/set ember-runtime/system/string ember-runtime/system/deferred ember-runtime/system/lazy_load ember-runtime/mixins/array ember-runtime/mixins/comparable ember-runtime/mixins/copyable ember-runtime/mixins/enumerable ember-runtime/mixins/freezable ember-runtime/mixins/observable ember-runtime/mixins/action_handler ember-runtime/mixins/deferred ember-runtime/mixins/mutable_enumerable ember-runtime/mixins/mutable_array ember-runtime/mixins/target_action_support ember-runtime/mixins/evented ember-runtime/mixins/promise_proxy ember-runtime/mixins/sortable ember-runtime/computed/array_computed ember-runtime/computed/reduce_computed ember-runtime/computed/reduce_computed_macros ember-runtime/controllers/array_controller ember-runtime/controllers/object_controller ember-runtime/controllers/controller ember-runtime/ext/rsvp ember-runtime/ext/string ember-runtime/ext/function exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r,v,y,A,x,G,B,C,E,t,L,H,K,Q,I,N,z,F,P,O,R,D,U,Y,da,ea,V){var J=a["default"],Z=m.isEqual,na=n["default"],W=l["default"],T=k["default"],ca=d["default"],$=h["default"],fa=c["default"],aa=b["default"],la=p["default"],ja=u["default"],ra=w["default"],ma=s.EachArray,sa=s.EachProxy,ta=q["default"],ha=e["default"],oa=r["default"],S=v["default"],pa=y.onLoad,ba=y.runLoadHooks,qa=A["default"],xa=x["default"],ya=G["default"],za=B["default"],Aa=C.Freezable,Ba=C.FROZEN_ERROR,
Ca=E["default"],Da=t["default"],ia=L["default"],ka=H["default"],Ea=K["default"],Fa=Q["default"],Ga=I["default"],Ha=N["default"],Ia=z["default"],Ja=F.arrayComputed,Ka=F.ArrayComputedProperty,La=P.reduceComputed,Ma=P.ReduceComputedProperty,Na=O.sum,Oa=O.min,Pa=O.max,Qa=O.map,Ra=O.sort,Sa=O.setDiff,Ta=O.mapBy,Ua=O.mapProperty,Va=O.filter,Wa=O.filterBy,Xa=O.filterProperty,Ya=O.uniq,Za=O.union,$a=O.intersect,ab=R["default"],bb=D["default"],cb=U.Controller,db=U.ControllerMixin,eb=Y["default"];J.compare=
f["default"];J.copy=W;J.isEqual=Z;J.keys=na;J.Array=qa;J.Comparable=xa;J.Copyable=ya;J.SortableMixin=Ia;J.Freezable=Aa;J.FROZEN_ERROR=Ba;J.DeferredMixin=ia;J.MutableEnumerable=ka;J.MutableArray=Ea;J.TargetActionSupport=Fa;J.Evented=Ga;J.PromiseProxyMixin=Ha;J.Observable=Ca;J.arrayComputed=Ja;J.ArrayComputedProperty=Ka;J.reduceComputed=La;J.ReduceComputedProperty=Ma;var ga=J.computed;ga.sum=Na;ga.min=Oa;ga.max=Pa;ga.map=Qa;ga.sort=Ra;ga.setDiff=Sa;ga.mapBy=Ta;ga.mapProperty=Ua;ga.filter=Va;ga.filterBy=
Wa;ga.filterProperty=Xa;ga.uniq=Ya;ga.union=Za;ga.intersect=$a;J.String=oa;J.Object=ca;J.TrackedArray=$;J.SubArray=fa;J.Container=aa;J.Namespace=T;J.Enumerable=za;J.ArrayProxy=la;J.ObjectProxy=ja;J.ActionHandler=Da;J.CoreObject=ra;J.EachArray=ma;J.EachProxy=sa;J.NativeArray=ta;J.Set=ha;J.Deferred=S;J.onLoad=pa;J.runLoadHooks=ba;J.ArrayController=ab;J.ObjectController=bb;J.Controller=cb;J.ControllerMixin=db;J.RSVP=eb;V["default"]=J});t("ember-runtime/compare",["ember-metal/core","ember-metal/utils",
"ember-runtime/mixins/comparable","exports"],function(a,m,n,f){var l=a["default"],k=m.typeOf,d=n["default"];l.ORDER_DEFINITION=l.ENV.ORDER_DEFINITION||"undefined null boolean number string array object instance function class date".split(" ");f["default"]=function c(a,g){if(a===g)return 0;var f=k(a),m=k(g);if(d){if("instance"===f&&d.detect(a.constructor))return a.constructor.compare(a,g);if("instance"===m&&d.detect(g.constructor))return 1-g.constructor.compare(g,a)}var n=l.ORDER_DEFINITION_MAPPING;
if(!n){var s=l.ORDER_DEFINITION,n=l.ORDER_DEFINITION_MAPPING={},q,e;q=0;for(e=s.length;q<e;++q)n[s[q]]=q;delete l.ORDER_DEFINITION}s=n[f];m=n[m];if(s<m)return-1;if(s>m)return 1;switch(f){case "boolean":case "number":return a<g?-1:a>g?1:0;case "string":return f=a.localeCompare(g),0>f?-1:0<f?1:0;case "array":f=a.length;m=g.length;n=Math.min(f,m);for(q=s=0;0===s&&q<n;)s=c(a[q],g[q]),q++;return 0!==s?s:f<m?-1:f>m?1:0;case "instance":return d&&d.detect(a)?a.compare(a,g):0;case "date":return f=a.getTime(),
m=g.getTime(),f<m?-1:f>m?1:0;default:return 0}}});t("ember-runtime/computed/array_computed","ember-metal/core ember-runtime/computed/reduce_computed ember-metal/enumerable_utils ember-metal/platform ember-metal/observer ember-metal/error exports".split(" "),function(a,m,n,f,l,k,d){function h(){var a=this;b.apply(this,arguments);this.func=function(b){return function(c){a._hasInstanceMeta(this,c)||w(a._dependentKeys,function(b){g(this,b,function(){a.recomputeOnce.call(this,c)})},this);return b.apply(this,
arguments)}}(this.func);return this}var c=a["default"],b=m.ReduceComputedProperty,g=l.addObserver,p=k["default"],u=[].slice;a=f.create;var w=n["default"].forEach;h.prototype=a(b.prototype);h.prototype.initialValue=function(){return c.A()};h.prototype.resetValue=function(a){a.clear();return a};h.prototype.didChange=function(a,b){};d.arrayComputed=function(a){var b;1<arguments.length&&(b=u.call(arguments,0,-1),a=u.call(arguments,-1)[0]);if("object"!==typeof a)throw new p("Array Computed Property declared without an options hash");
var c=new h(a);b&&c.property.apply(c,b);return c};d.ArrayComputedProperty=h});t("ember-runtime/computed/reduce_computed","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/error ember-metal/property_events ember-metal/expand_properties ember-metal/observer ember-metal/computed ember-metal/platform ember-metal/enumerable_utils ember-runtime/system/tracked_array ember-runtime/mixins/array ember-metal/run_loop ember-runtime/system/set exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q){function e(a,b){return"@this"===b?a:L(a,b)}function r(a,b,c,e,g,d){this.callbacks=a;this.cp=b;this.instanceMeta=c;this.dependentKeysByGuid={};this.trackedArraysByGuid={};this.suspended=!1;this.changedItems={};this.changedItemCount=0}function v(a,b,c){t.assert("Internal error: trackedArray is null or undefined",c);this.dependentArray=a;this.index=b;this.item=a.objectAt(b);this.trackedArray=c;this.observer=this.beforeObserver=null;this.destroyed=!1}function y(a,
b,c,e,g,d,f){this.arrayChanged=a;this.index=c;this.item=b;this.propertyName=e;this.property=g;this.changedCount=d;f&&(this.previousValues=f)}function A(a,b,c,e,g){T(a,function(d,f){g.setValue(b.addedItem.call(this,g.getValue(),d,new y(a,d,f,e,c,a.length),g.sugarMeta))},this)}function x(a,b){a._callbacks();var c;a._hasInstanceMeta(this,b)?(c=a._instanceMeta(this,b),c.setValue(a.resetValue(c.getValue()))):c=a._instanceMeta(this,b);a.options.initialize&&a.options.initialize.call(this,c.getValue(),{property:a,
propertyName:b},c.sugarMeta)}function G(a,b){if(fa.test(b))return!1;var c=e(a,b);return Y.detect(c)}function B(a,b,c){this.context=a;this.propertyName=b;this.cache=K(a).cache;this.dependentArrays={};this.sugarMeta={};this.initialValue=c}function C(a){var b=this;this.options=a;this._dependentKeys=null;this._itemPropertyKeys={};this._previousItemPropertyKeys={};this.readOnly();this.cacheable();this.recomputeOnce=function(a){da.once(this,c,a)};var c=function(a){var c=b._instanceMeta(this,a),g=b._callbacks();
x.call(this,b,a);c.dependentArraysObserver.suspendArrayObservers(function(){T(b._dependentKeys,function(a){t.assert("dependent array "+a+" must be an `Ember.Array`. If you are not extending arrays, you will need to wrap native arrays with `Ember.A`",!(V(e(this,a))&&!Y.detect(e(this,a))));if(G(this,a)){var g=e(this,a),d=c.dependentArrays[a];g===d?b._previousItemPropertyKeys[a]&&(delete b._previousItemPropertyKeys[a],c.dependentArraysObserver.setupPropertyObservers(a,b._itemPropertyKeys[a])):(c.dependentArrays[a]=
g,d&&c.dependentArraysObserver.teardownObservers(d,a),g&&c.dependentArraysObserver.setupObservers(g,a))}},this)},this);T(b._dependentKeys,function(d){G(this,d)&&(d=e(this,d))&&A.call(this,d,g,b,a,c)},this)};this.func=function(a){t.assert("Computed reduce values require at least one dependent key",b._dependentKeys);c.call(this,a);return b._instanceMeta(this,a).getValue()}}function E(a){return a}var t=a["default"],L=m.get,H=f.guidFor,K=f.meta,Q=l["default"],I=k.propertyWillChange,N=k.propertyDidChange,
z=d["default"],F=h.addObserver,P=h.removeObserver,O=h.addBeforeObserver,R=h.removeBeforeObserver,D=c.ComputedProperty;a=c.cacheFor;var U=p["default"],Y=u["default"],da=w["default"],ea=s["default"],V=f.isArray,J=a.set,Z=a.get,na=a.remove,W=[].slice;f=b.create;var T=g["default"].forEach,ca=/^(.*)\.@each\.(.*)/,$=/(.*\.@each){2,}/,fa=/\.\[\]$/;r.prototype={setValue:function(a){this.instanceMeta.setValue(a,!0)},getValue:function(){return this.instanceMeta.getValue()},setupObservers:function(a,b){this.dependentKeysByGuid[H(a)]=
b;a.addArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"});this.cp._itemPropertyKeys[b]&&this.setupPropertyObservers(b,this.cp._itemPropertyKeys[b])},teardownObservers:function(a,b){var c=this.cp._itemPropertyKeys[b]||[];delete this.dependentKeysByGuid[H(a)];this.teardownPropertyObservers(b,c);a.removeArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"})},suspendArrayObservers:function(a,b){var c=this.suspended;
this.suspended=!0;a.call(b);this.suspended=c},setupPropertyObservers:function(a,b){var c=e(this.instanceMeta.context,a),g=e(c,"length"),d=Array(g);this.resetTransformations(a,d);T(c,function(e,g){var f=this.createPropertyObserverContext(c,g,this.trackedArraysByGuid[a]);d[g]=f;T(b,function(a){O(e,a,this,f.beforeObserver);F(e,a,this,f.observer)},this)},this)},teardownPropertyObservers:function(a,b){var c=this,e=this.trackedArraysByGuid[a],g,d,f;e&&e.apply(function(a,e,r){r!==U.DELETE&&T(a,function(a){a.destroyed=
!0;g=a.beforeObserver;d=a.observer;f=a.item;T(b,function(a){R(f,a,c,g);P(f,a,c,d)})})})},createPropertyObserverContext:function(a,b,c){a=new v(a,b,c);this.createPropertyObserver(a);return a},createPropertyObserver:function(a){var b=this;a.beforeObserver=function(c,e){return b.itemPropertyWillChange(c,e,a.dependentArray,a)};a.observer=function(c,e){return b.itemPropertyDidChange(c,e,a.dependentArray,a)}},resetTransformations:function(a,b){this.trackedArraysByGuid[a]=new U(b)},trackAdd:function(a,b,
c){(a=this.trackedArraysByGuid[a])&&a.addItems(b,c)},trackRemove:function(a,b,c){return(a=this.trackedArraysByGuid[a])?a.removeItems(b,c):[]},updateIndexes:function(a,b){var c=e(b,"length");a.apply(function(a,b,e,g){e!==U.DELETE&&(0===g&&e===U.RETAIN&&a.length===c&&0===b||T(a,function(a,c){a.index=c+b}))})},dependentArrayWillChange:function(a,b,c,g){function d(a){k[h].destroyed=!0;R(p,a,this,k[h].beforeObserver);P(p,a,this,k[h].observer)}if(!this.suspended){g=this.callbacks.removedItem;var f,r=H(a);
f=this.dependentKeysByGuid[r];var r=this.cp._itemPropertyKeys[f]||[],q=e(a,"length");b=0>b?Math.max(0,q+b):b<q?b:Math.min(q-0,b);c=Math.min(c,q-b);var p,h,k;k=this.trackRemove(f,b,c);for(h=c-1;0<=h;--h){f=b+h;if(f>=q)break;p=a.objectAt(f);T(r,d,this);f=new y(a,p,f,this.instanceMeta.propertyName,this.cp,c);this.setValue(g.call(this.instanceMeta.context,this.getValue(),p,f,this.instanceMeta.sugarMeta))}}},dependentArrayDidChange:function(a,b,c,g){if(!this.suspended){var d=this.callbacks.addedItem;c=
H(a);var f=this.dependentKeysByGuid[c],r=Array(g),q=this.cp._itemPropertyKeys[f];c=e(a,"length");var p=0>b?Math.max(0,c+b):b<c?b:Math.min(c-g,b),h,k;T(a.slice(p,p+g),function(b,c){q&&(k=r[c]=this.createPropertyObserverContext(a,p+c,this.trackedArraysByGuid[f]),T(q,function(a){O(b,a,this,k.beforeObserver);F(b,a,this,k.observer)},this));h=new y(a,b,p+c,this.instanceMeta.propertyName,this.cp,g);this.setValue(d.call(this.instanceMeta.context,this.getValue(),b,h,this.instanceMeta.sugarMeta))},this);this.trackAdd(f,
p,r)}},itemPropertyWillChange:function(a,b,c,g){var d=H(a);this.changedItems[d]||(this.changedItems[d]={array:c,observerContext:g,obj:a,previousValues:{}});++this.changedItemCount;this.changedItems[d].previousValues[b]=e(a,b)},itemPropertyDidChange:function(a,b,c,e){0===--this.changedItemCount&&this.flushChanges()},flushChanges:function(){var a=this.changedItems,b,c,e;for(b in a)c=a[b],c.observerContext.destroyed||(this.updateIndexes(c.observerContext.trackedArray,c.observerContext.dependentArray),
e=new y(c.array,c.obj,c.observerContext.index,this.instanceMeta.propertyName,this.cp,a.length,c.previousValues),this.setValue(this.callbacks.removedItem.call(this.instanceMeta.context,this.getValue(),c.obj,e,this.instanceMeta.sugarMeta)),this.setValue(this.callbacks.addedItem.call(this.instanceMeta.context,this.getValue(),c.obj,e,this.instanceMeta.sugarMeta)));this.changedItems={}}};B.prototype={getValue:function(){var a=Z(this.cache,this.propertyName);return void 0!==a?a:this.initialValue},setValue:function(a,
b){a!==Z(this.cache,this.propertyName)&&(b&&I(this.context,this.propertyName),void 0===a?na(this.cache,this.propertyName):J(this.cache,this.propertyName,a),b&&N(this.context,this.propertyName))}};q.ReduceComputedProperty=C;C.prototype=f(D.prototype);C.prototype._callbacks=function(){if(!this.callbacks){var a=this.options;this.callbacks={removedItem:a.removedItem||E,addedItem:a.addedItem||E}}return this.callbacks};C.prototype._hasInstanceMeta=function(a,b){return!!K(a).cacheMeta[b]};C.prototype._instanceMeta=
function(a,b){var c=K(a).cacheMeta,e=c[b];e||(e=c[b]=new B(a,b,this.initialValue()),e.dependentArraysObserver=new r(this._callbacks(),this,e,a,b,e.sugarMeta));return e};C.prototype.initialValue=function(){return"function"===typeof this.options.initialValue?this.options.initialValue():this.options.initialValue};C.prototype.resetValue=function(a){return this.initialValue()};C.prototype.itemPropertyKey=function(a,b){this._itemPropertyKeys[a]=this._itemPropertyKeys[a]||[];this._itemPropertyKeys[a].push(b)};
C.prototype.clearItemPropertyKeys=function(a){this._itemPropertyKeys[a]&&(this._previousItemPropertyKeys[a]=this._itemPropertyKeys[a],this._itemPropertyKeys[a]=[])};C.prototype.property=function(){var a=this,b=W.call(arguments),c=new ea,e,g;T(b,function(b){if($.test(b))throw new Q("Nested @each properties not supported: "+b);(e=ca.exec(b))?(g=e[1],z(e[2],function(b){a.itemPropertyKey(g,b)}),c.add(g)):c.add(b)});return D.prototype.property.apply(this,c.toArray())};q.reduceComputed=function(a){var b;
1<arguments.length&&(b=W.call(arguments,0,-1),a=W.call(arguments,-1)[0]);if("object"!==typeof a)throw new Q("Reduce Computed Property declared without an options hash");if(!("initialValue"in a))throw new Q("Reduce Computed Property declared without an initial value");var c=new C(a);b&&c.property.apply(c,b);return c}});t("ember-runtime/computed/reduce_computed_macros","ember-metal/core ember-metal/merge ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/error ember-metal/enumerable_utils ember-metal/run_loop ember-metal/observer ember-runtime/computed/array_computed ember-runtime/computed/reduce_computed ember-runtime/system/object_proxy ember-runtime/system/subarray ember-runtime/keys ember-runtime/compare exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q){function e(a,b){return I(a,{addedItem:function(a,c,e,g){c=b.call(this,c);a.insertAt(e.index,c);return a},removedItem:function(a,b,c,e){a.removeAt(c.index,1);return a}})}function r(a,b){return e(a+".@each."+b,function(a){return C(a,b)})}function v(a,b){return I(a,{initialize:function(a,b,c){c.filteredArrayIndexes=new z},addedItem:function(a,c,e,g){var d=!!b.call(this,c);e=g.filteredArrayIndexes.addItem(e.index,d);d&&a.insertAt(e,c);return a},removedItem:function(a,
b,c,e){b=e.filteredArrayIndexes.removeItem(c.index);-1<b&&a.removeAt(b);return a}})}function y(a,b,c){return v(a+".@each."+b,2===arguments.length?function(a){return C(a,b)}:function(a){return C(a,b)===c})}function A(){var a=O.call(arguments);a.push({initialize:function(a,b,c){c.itemCounts={}},addedItem:function(a,b,c,e){c=t(b);e.itemCounts[c]?++e.itemCounts[c]:e.itemCounts[c]=1;a.addObject(b);return a},removedItem:function(a,b,c,e){c=t(b);0===--e.itemCounts[c]&&a.removeObject(b);return a}});return I.apply(null,
a)}function x(a,b,c,e){function g(a){return D.detectInstance(a)?t(C(a,"content")):t(a)}var d,f,r,q;4>arguments.length&&(e=C(a,"length"));3>arguments.length&&(c=0);if(c===e)return c;d=c+Math.floor((e-c)/2);f=a.objectAt(d);r=g(f);q=g(b);if(r===q)return d;f=this.order(f,b);0===f&&(f=r<q?-1:1);return 0>f?this.binarySearch(a,b,d+1,e):0<f?this.binarySearch(a,b,c,d):d}var G=a["default"],B=m["default"],C=n.get,E=l.isArray,t=l.guidFor,L=k["default"],H=d["default"],K=h["default"],Q=c.addObserver,I=b.arrayComputed,
N=g.reduceComputed;a=p["default"];var z=u["default"],F=w["default"],P=s["default"],O=[].slice,R=H.forEach,D;q.sum=function(a){return N(a,{initialValue:0,addedItem:function(a,b,c,e){return a+b},removedItem:function(a,b,c,e){return a-b}})};q.max=function(a){return N(a,{initialValue:-Infinity,addedItem:function(a,b,c,e){return Math.max(a,b)},removedItem:function(a,b,c,e){if(b<a)return a}})};q.min=function(a){return N(a,{initialValue:Infinity,addedItem:function(a,b,c,e){return Math.min(a,b)},removedItem:function(a,
b,c,e){if(b>a)return a}})};q.map=e;q.mapBy=r;q.mapProperty=r;q.filter=v;q.filterBy=y;q.filterProperty=y;q.uniq=A;q.union=A;q.intersect=function(){var a=function(a){return H.map(a.property._dependentKeys,function(a){return t(a)})},b=O.call(arguments);b.push({initialize:function(a,b,c){c.itemCounts={}},addedItem:function(b,c,e,g){var d=t(c);a(e);var f=t(e.arrayChanged);e=e.property._dependentKeys.length;g=g.itemCounts;g[d]||(g[d]={});void 0===g[d][f]&&(g[d][f]=0);1===++g[d][f]&&e===F(g[d]).length&&
b.addObject(c);return b},removedItem:function(b,c,e,g){var d=t(c);a(e);e=t(e.arrayChanged);g=g.itemCounts;void 0===g[d][e]&&(g[d][e]=0);0===--g[d][e]&&(delete g[d][e],e=F(g[d]).length,0===e&&delete g[d],b.removeObject(c));return b}});return I.apply(null,b)};q.setDiff=function(a,b){if(2!==arguments.length)throw new L("setDiff requires exactly two dependent arrays.");return I(a,b,{addedItem:function(c,e,g,d){d=C(this,a);var f=C(this,b);g.arrayChanged===d?f.contains(e)||c.addObject(e):c.removeObject(e);
return c},removedItem:function(c,e,g,d){d=C(this,a);var f=C(this,b);g.arrayChanged===f?d.contains(e)&&c.addObject(e):c.removeObject(e);return c}})};D=a.extend();q.sort=function(a,b){G.assert("Ember.computed.sort requires two arguments: an array key to sort and either a sort properties key or sort function",2===arguments.length);var c,e;"function"===typeof b?c=function(a,c,e){e.order=b;e.binarySearch=x}:(e=b,c=function(b,c,g){function d(){var b=C(this,e),r,q=g.sortProperties=[],p=g.sortPropertyAscending=
{},h,k;G.assert("Cannot sort: '"+e+"' is not an array.",E(b));c.property.clearItemPropertyKeys(a);R(b,function(b){-1!==(h=b.indexOf(":"))?(r=b.substring(0,h),k="desc"!==b.substring(h+1).toLowerCase()):(r=b,k=!0);q.push(r);p[r]=k;c.property.itemPropertyKey(a,r)});b.addObserver("@each",this,f)}function f(){K.once(this,r,c.propertyName)}function r(a){d.call(this);c.property.recomputeOnce.call(this,a)}Q(this,e,f);d.call(this);g.order=function(a,b){for(var c=b instanceof D,e,g,d=0;d<this.sortProperties.length;++d)if(e=
this.sortProperties[d],g=P(C(a,e),c?b[e]:C(b,e)),0!==g)return(c=this.sortPropertyAscending[e])?g:-1*g;return 0};g.binarySearch=x});return I(a,{initialize:c,addedItem:function(a,b,c,e){c=e.binarySearch(a,b);a.insertAt(c,b);return a},removedItem:function(a,b,c,e){c.previousValues&&(b=B({content:b},c.previousValues),b=D.create(b));e=e.binarySearch(a,b);a.removeAt(e);return a}})}});t("ember-runtime/controllers/array_controller","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/enumerable_utils ember-runtime/system/array_proxy ember-runtime/mixins/sortable ember-runtime/controllers/controller ember-metal/computed ember-metal/error exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b){var g=a["default"],p=m.get;a=f["default"];h=h.computed;var u=c["default"],w=a.forEach,s=a.replace;b["default"]=l["default"].extend(d.ControllerMixin,k["default"],{itemController:null,lookupItemController:function(a){return p(this,"itemController")},objectAtContent:function(a){var b=p(this,"length"),c=p(this,"arrangedContent"),c=c&&c.objectAt(a);return 0<=a&&a<b&&(b=this.lookupItemController(c))?this.controllerAt(a,c,b):c},arrangedContentDidChange:function(){this._super();
this._resetSubControllers()},arrayContentDidChange:function(a,b,c){var g=this._subControllers;if(g.length){var d=g.slice(a,a+b);w(d,function(a){a&&a.destroy()});s(g,a,b,Array(c))}this._super(a,b,c)},init:function(){this._super();this._subControllers=[]},model:h(function(){return g.A()}),_isVirtual:!1,controllerAt:function(a,b,c){var g,d=p(this,"container"),f=this._subControllers;if(f.length>a&&(g=f[a]))return g;g="controller:"+c;if(!d.has(g))throw new u('Could not resolve itemController: "'+c+'"');
c=this._isVirtual?p(this,"parentController"):this;g=d.lookupFactory(g).create({target:c,parentController:c,model:b});return f[a]=g},_subControllers:null,_resetSubControllers:function(){var a,b=this._subControllers;if(b.length){for(var c=0,g=b.length;g>c;c++)(a=b[c])&&a.destroy();b.length=0}},willDestroy:function(){this._resetSubControllers();this._super()}})});t("ember-runtime/controllers/controller","ember-metal/core ember-metal/property_get ember-runtime/system/object ember-metal/mixin ember-metal/computed ember-runtime/mixins/action_handler ember-runtime/mixins/controller_content_model_alias_deprecation exports".split(" "),
function(a,m,n,f,l,k,d,h){var c=a["default"];a=n["default"];f=f.Mixin.create(k["default"],d["default"],{isController:!0,target:null,container:null,parentController:null,store:null,model:null,content:l.computed.alias("model"),deprecatedSendHandles:function(a){return!!this[a]},deprecatedSend:function(a){var g=[].slice.call(arguments,1);c.assert(""+this+" has the action "+a+" but it is not a function","function"===typeof this[a]);c.deprecate("Action handlers implemented directly on controllers are deprecated in favor of action handlers on an `actions` object ( action: `"+
a+"` on "+this+")",!1);this[a].apply(this,g)}});l=a.extend(f);h.Controller=l;h.ControllerMixin=f});t("ember-runtime/controllers/object_controller",["ember-runtime/controllers/controller","ember-runtime/system/object_proxy","exports"],function(a,m,n){n["default"]=m["default"].extend(a.ControllerMixin)});t("ember-runtime/copy","ember-metal/enumerable_utils ember-metal/utils ember-runtime/system/object ember-runtime/mixins/copyable ember-metal/platform exports".split(" "),function(a,m,n,f,l,k){function d(a,
f,k,l){var q,e,r;if("object"!==typeof a||null===a)return a;if(f&&0<=(e=g(k,a)))return l[e];D.assert("Cannot clone an Ember.Object that does not implement Ember.Copyable",!(a instanceof c)||b&&b.detect(a));if("array"===h(a)){if(q=a.slice(),f)for(e=q.length;0<=--e;)q[e]=d(q[e],f,k,l)}else if(b&&b.detect(a))q=a.copy(f,k,l);else if(a instanceof Date)q=new Date(a.getTime());else for(r in q={},a)a.hasOwnProperty(r)&&"__"!==r.substring(0,2)&&(q[r]=f?d(a[r],f,k,l):a[r]);f&&(k.push(a),l.push(q));return q}
var h=m.typeOf,c=n["default"],b=f["default"],g=a["default"].indexOf;k["default"]=function(a,c){return"object"!==typeof a||null===a?a:b&&b.detect(a)?a.copy(c):d(a,c,c?[]:null,c?[]:null)}});t("ember-runtime/core",["exports"],function(a){a.isEqual=function(a,n){return a&&"function"===typeof a.isEqual?a.isEqual(n):a instanceof Date&&n instanceof Date?a.getTime()===n.getTime():a===n}});t("ember-runtime/ext/function",["ember-metal/core","ember-metal/expand_properties","ember-metal/computed"],function(a,
m,n){var f=a["default"],l=m["default"],k=n.computed,d=Array.prototype.slice;a=Function.prototype;if(!0===f.EXTEND_PROTOTYPES||f.EXTEND_PROTOTYPES.Function)a.property=function(){var a=k(this);return a.property.apply(a,arguments)},a.observes=function(){for(var a=function(a){c.push(a)},c=[],b=0;b<arguments.length;++b)l(arguments[b],a);this.__ember_observes__=c;return this},a.observesImmediately=function(){for(var a=0,c=arguments.length;a<c;a++)f.assert("Immediate observers must observe internal properties only, not properties on other objects.",
-1===arguments[a].indexOf("."));return this.observes.apply(this,arguments)},a.observesBefore=function(){for(var a=function(a){c.push(a)},c=[],b=0;b<arguments.length;++b)l(arguments[b],a);this.__ember_observesBefore__=c;return this},a.on=function(){this.__ember_listens__=d.call(arguments);return this}});t("ember-runtime/ext/rsvp",["ember-metal/core","ember-metal/logger","exports"],function(a,m,n){var f=a["default"],l=m["default"];a=S("rsvp");var k;a.onerrorDefault=function(a){if(a instanceof Error)if(f.testing)if(!k&&
f.__loader.registry["ember-testing/test"]&&(k=S("ember-testing/test")["default"]),k&&k.adapter)k.adapter.exception(a);else throw a;else if(f.onerror)f.onerror(a);else l.error(a.stack),f.assert(a,!1)};a.on("error",a.onerrorDefault);n["default"]=a});t("ember-runtime/ext/string",["ember-metal/core","ember-runtime/system/string"],function(a,m){var n=a["default"],f=m.fmt,l=m.w,k=m.loc,d=m.camelize,h=m.decamelize,c=m.dasherize,b=m.underscore,g=m.capitalize,p=m.classify,u=String.prototype;if(!0===n.EXTEND_PROTOTYPES||
n.EXTEND_PROTOTYPES.String)u.fmt=function(){return f(this,arguments)},u.w=function(){return l(this)},u.loc=function(){return k(this,arguments)},u.camelize=function(){return d(this)},u.decamelize=function(){return h(this)},u.dasherize=function(){return c(this)},u.underscore=function(){return b(this)},u.classify=function(){return p(this)},u.capitalize=function(){return g(this)}});t("ember-runtime/keys",["ember-metal/enumerable_utils","ember-metal/platform","exports"],function(a,m,n){var f=a["default"];
a=m.create;m=Object.keys;if(!m||a.isSimulated){var l="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable valueOf toLocaleString toString".split(" "),k=function(a,h,c){"__"!==c.substring(0,2)&&"_super"!==c&&(0<=f.indexOf(h,c)||("function"!==typeof a.hasOwnProperty||a.hasOwnProperty(c))&&h.push(c))};m=function(a){var f=[],c;for(c in a)k(a,f,c);for(var b=0,g=l.length;b<g;b++)c=l[b],k(a,f,c);return f}}n["default"]=m});t("ember-runtime/mixins/action_handler",["ember-metal/merge","ember-metal/mixin",
"ember-metal/property_get","ember-metal/utils","exports"],function(a,m,n,f,l){var k=a["default"],d=n.get,h=f.typeOf;a=m.Mixin.create({mergedProperties:["_actions"],willMergeMixin:function(a){var b;a._actions||(D.assert("'actions' should not be a function","function"!==typeof a.actions),"object"===h(a.actions)?b="actions":"object"===h(a.events)&&(D.deprecate("Action handlers contained in an `events` object are deprecated in favor of putting them in an `actions` object",!1),b="events"),b&&(a._actions=
k(a._actions||{},a[b])),delete a[b])},send:function(a){var b=[].slice.call(arguments,1);if(this._actions&&this._actions[a]){if(!0!==this._actions[a].apply(this,b))return}else if(!D.FEATURES.isEnabled("ember-routing-drop-deprecated-action-style")&&(this.deprecatedSend&&this.deprecatedSendHandles&&this.deprecatedSendHandles(a))&&(D.warn("The current default is deprecated but will prefer to handle actions directly on the controller instead of a similarly named action in the actions hash. To turn off this deprecated feature set: Ember.FEATURES['ember-routing-drop-deprecated-action-style'] = true"),
!0!==this.deprecatedSend.apply(this,[].slice.call(arguments))))return;if(b=d(this,"target"))D.assert("The `target` for "+this+" ("+b+") does not have a `send` method","function"===typeof b.send),b.send.apply(b,arguments)}});l["default"]=a});t("ember-runtime/mixins/array","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/computed ember-metal/is_none ember-runtime/mixins/enumerable ember-metal/enumerable_utils ember-metal/mixin ember-metal/property_events ember-metal/events ember-metal/watching exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p){var u=a["default"],w=m.get;a=f.computed;var s=f.cacheFor,q=l.isNone;f=h.required;var e=c.propertyWillChange,r=c.propertyDidChange,v=b.addListener,y=b.removeListener,A=b.sendEvent,x=b.hasListeners,G=g.isWatching,B=d["default"].map;p["default"]=h.Mixin.create(k["default"],{length:f(),objectAt:function(a){return 0>a||a>=w(this,"length")?void 0:w(this,a)},objectsAt:function(a){var b=this;return B(a,function(a){return b.objectAt(a)})},nextObject:function(a){return this.objectAt(a)},
"[]":a(function(a,b){void 0!==b&&this.replace(0,w(this,"length"),b);return this}),firstObject:a(function(){return this.objectAt(0)}),lastObject:a(function(){return this.objectAt(w(this,"length")-1)}),contains:function(a){return 0<=this.indexOf(a)},slice:function(a,b){var c=u.A(),e=w(this,"length");q(a)&&(a=0);if(q(b)||b>e)b=e;0>a&&(a=e+a);for(0>b&&(b=e+b);a<b;)c[c.length]=this.objectAt(a++);return c},indexOf:function(a,b){var c,e=w(this,"length");void 0===b&&(b=0);0>b&&(b+=e);for(c=b;c<e;c++)if(this.objectAt(c)===
a)return c;return-1},lastIndexOf:function(a,b){var c;c=w(this,"length");if(void 0===b||b>=c)b=c-1;0>b&&(b+=c);for(c=b;0<=c;c--)if(this.objectAt(c)===a)return c;return-1},addArrayObserver:function(a,b){var c=b&&b.willChange||"arrayWillChange",g=b&&b.didChange||"arrayDidChange",d=w(this,"hasArrayObservers");d||e(this,"hasArrayObservers");v(this,"@array:before",a,c);v(this,"@array:change",a,g);d||r(this,"hasArrayObservers");return this},removeArrayObserver:function(a,b){var c=b&&b.willChange||"arrayWillChange",
g=b&&b.didChange||"arrayDidChange",d=w(this,"hasArrayObservers");d&&e(this,"hasArrayObservers");y(this,"@array:before",a,c);y(this,"@array:change",a,g);d&&r(this,"hasArrayObservers");return this},hasArrayObservers:a(function(){return x(this,"@array:change")||x(this,"@array:before")}),arrayContentWillChange:function(a,b,c){void 0===a?(a=0,b=c=-1):(void 0===b&&(b=-1),void 0===c&&(c=-1));G(this,"@each")&&w(this,"@each");A(this,"@array:before",[this,a,b,c]);var e;if(0<=a&&0<=b&&w(this,"hasEnumerableObservers")){e=
[];for(b=a+b;a<b;a++)e.push(this.objectAt(a))}else e=b;this.enumerableContentWillChange(e,c);return this},arrayContentDidChange:function(a,b,c){void 0===a?(a=0,b=c=-1):(void 0===b&&(b=-1),void 0===c&&(c=-1));var g,d;if(0<=a&&0<=c&&w(this,"hasEnumerableObservers")){g=[];d=a+c;for(var f=a;f<d;f++)g.push(this.objectAt(f))}else g=c;this.enumerableContentDidChange(b,g);A(this,"@array:change",[this,a,b,c]);a=w(this,"length");b=s(this,"firstObject");c=s(this,"lastObject");this.objectAt(0)!==b&&(e(this,"firstObject"),
r(this,"firstObject"));this.objectAt(a-1)!==c&&(e(this,"lastObject"),r(this,"lastObject"));return this},"@each":a(function(){this.__each||(this.__each=new (S("ember-runtime/system/each_proxy").EachProxy)(this));return this.__each})})});t("ember-runtime/mixins/comparable",["ember-metal/mixin","exports"],function(a,m){var n=a.required;m["default"]=a.Mixin.create({compare:n(Function)})});t("ember-runtime/mixins/controller_content_model_alias_deprecation",["ember-metal/core","ember-metal/property_get",
"ember-metal/mixin","exports"],function(a,m,n,f){var l=a["default"];f["default"]=n.Mixin.create({willMergeMixin:function(a){this._super.apply(this,arguments);var d=!!a.model;a.content&&!d&&(a.model=a.content,delete a.content,l.deprecate("Do not specify `content` on a Controller, use `model` instead.",!1))}})});t("ember-runtime/mixins/copyable","ember-metal/property_get ember-metal/property_set ember-metal/mixin ember-runtime/mixins/freezable ember-runtime/system/string ember-metal/error exports".split(" "),
function(a,m,n,f,l,k,d){var h=a.get;a=n.required;var c=f.Freezable,b=l.fmt,g=k["default"];d["default"]=n.Mixin.create({copy:a(Function),frozenCopy:function(){if(c&&c.detect(this))return h(this,"isFrozen")?this:this.copy().freeze();throw new g(b("%@ does not support freezing",[this]));}})});t("ember-runtime/mixins/deferred","ember-metal/core ember-metal/property_get ember-metal/mixin ember-metal/computed ember-metal/run_loop ember-runtime/ext/rsvp exports".split(" "),function(a,m,n,f,l,k,d){var h=
a["default"],c=m.get;a=n.Mixin;f=f.computed;var b=l["default"],g=k["default"];g.configure("async",function(a,c){var g=!b.currentRunLoop;h.testing&&g&&h.Test&&h.Test.adapter&&h.Test.adapter.asyncStart();b.backburner.schedule("actions",function(){h.testing&&g&&h.Test&&h.Test.adapter&&h.Test.adapter.asyncEnd();a(c)})});g.Promise.prototype.fail=function(a,b){h.deprecate("RSVP.Promise.fail has been renamed as RSVP.Promise.catch");return this["catch"](a,b)};d["default"]=a.create({then:function(a,b,g){function d(b){return b===
f?a(e):a(b)}var f,e;e=this;f=c(this,"_deferred").promise;return f.then(a&&d,b,g)},resolve:function(a){var b,g;b=c(this,"_deferred");g=b.promise;a===this?b.resolve(g):b.resolve(a)},reject:function(a){c(this,"_deferred").reject(a)},_deferred:f(function(){return g.defer("Ember: DeferredMixin - "+this)})})});t("ember-runtime/mixins/enumerable","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/mixin ember-metal/enumerable_utils ember-metal/computed ember-metal/property_events ember-metal/events ember-runtime/compare exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g){function p(){return 0===L.length?{}:L.pop()}function u(a){L.push(a);return null}function w(a,b){var c=2===arguments.length;return function(e){e=q(e,a);return c?b===e:!!e}}var s=a["default"],q=m.get,e=n.set,r=f.apply;a=l.required;m=l.aliasMethod;d=d.computed;var v=h.propertyWillChange,y=h.propertyDidChange,A=c.addListener,x=c.removeListener,G=c.sendEvent,B=c.hasListeners,C=b["default"],t=Array.prototype.slice,M=k["default"].indexOf,L=[];g["default"]=l.Mixin.create({nextObject:a(Function),
firstObject:d(function(){if(0!==q(this,"length")){var a=p(),b;b=this.nextObject(0,null,a);u(a);return b}}).property("[]"),lastObject:d(function(){if(0!==q(this,"length")){var a=p(),b=0,c,e=null;do e=c,c=this.nextObject(b++,e,a);while(void 0!==c);u(a);return e}}).property("[]"),contains:function(a){return void 0!==this.find(function(b){return b===a})},forEach:function(a,b){if("function"!==typeof a)throw new TypeError;var c=q(this,"length"),e=null,g=p();void 0===b&&(b=null);for(var d=0;d<c;d++)e=this.nextObject(d,
e,g),a.call(b,e,d,this);u(g);return this},getEach:function(a){return this.mapBy(a)},setEach:function(a,b){return this.forEach(function(c){e(c,a,b)})},map:function(a,b){var c=s.A();this.forEach(function(e,g,d){c[g]=a.call(b,e,g,d)});return c},mapBy:function(a){return this.map(function(b){return q(b,a)})},mapProperty:m("mapBy"),filter:function(a,b){var c=s.A();this.forEach(function(e,g,d){a.call(b,e,g,d)&&c.push(e)});return c},reject:function(a,b){return this.filter(function(){return!r(b,a,arguments)})},
filterBy:function(a,b){return this.filter(r(this,w,arguments))},filterProperty:m("filterBy"),rejectBy:function(a,b){var c=function(c){return q(c,a)===b},e=function(b){return!!q(b,a)};return this.reject(2===arguments.length?c:e)},rejectProperty:m("rejectBy"),find:function(a,b){var c=q(this,"length");void 0===b&&(b=null);for(var e=null,g=!1,d,f=p(),r=0;r<c&&!g;r++)if(e=this.nextObject(r,e,f),g=a.call(b,e,r,this))d=e;u(f);return d},findBy:function(a,b){return this.find(r(this,w,arguments))},findProperty:m("findBy"),
every:function(a,b){return!this.find(function(c,e,g){return!a.call(b,c,e,g)})},everyBy:m("isEvery"),everyProperty:m("isEvery"),isEvery:function(a,b){return this.every(r(this,w,arguments))},any:function(a,b){var c=q(this,"length"),e=p(),g=!1,d=null,f;void 0===b&&(b=null);for(f=0;f<c&&!g;f++)d=this.nextObject(f,d,e),g=a.call(b,d,f,this);u(e);return g},some:m("any"),isAny:function(a,b){return this.any(r(this,w,arguments))},anyBy:m("isAny"),someProperty:m("isAny"),reduce:function(a,b,c){if("function"!==
typeof a)throw new TypeError;var e=b;this.forEach(function(b,g){e=a(e,b,g,this,c)},this);return e},invoke:function(a){var b,c=s.A();1<arguments.length&&(b=t.call(arguments,1));this.forEach(function(e,g){var d=e&&e[a];"function"===typeof d&&(c[g]=b?r(e,d,b):e[a]())},this);return c},toArray:function(){var a=s.A();this.forEach(function(b,c){a[c]=b});return a},compact:function(){return this.filter(function(a){return null!=a})},without:function(a){if(!this.contains(a))return this;var b=s.A();this.forEach(function(c){c!==
a&&(b[b.length]=c)});return b},uniq:function(){var a=s.A();this.forEach(function(b){0>M(a,b)&&a.push(b)});return a},"[]":d(function(a,b){return this}),addEnumerableObserver:function(a,b){var c=b&&b.willChange||"enumerableWillChange",e=b&&b.didChange||"enumerableDidChange",g=q(this,"hasEnumerableObservers");g||v(this,"hasEnumerableObservers");A(this,"@enumerable:before",a,c);A(this,"@enumerable:change",a,e);g||y(this,"hasEnumerableObservers");return this},removeEnumerableObserver:function(a,b){var c=
b&&b.willChange||"enumerableWillChange",e=b&&b.didChange||"enumerableDidChange",g=q(this,"hasEnumerableObservers");g&&v(this,"hasEnumerableObservers");x(this,"@enumerable:before",a,c);x(this,"@enumerable:change",a,e);g&&y(this,"hasEnumerableObservers");return this},hasEnumerableObservers:d(function(){return B(this,"@enumerable:change")||B(this,"@enumerable:before")}),enumerableContentWillChange:function(a,b){var c,e;c="number"===typeof a?a:a?q(a,"length"):a=-1;e="number"===typeof b?b:b?q(b,"length"):
b=-1;c=0>e||0>c||0!==e-c;-1===a&&(a=null);-1===b&&(b=null);v(this,"[]");c&&v(this,"length");G(this,"@enumerable:before",[this,a,b]);return this},enumerableContentDidChange:function(a,b){var c,e;c="number"===typeof a?a:a?q(a,"length"):a=-1;e="number"===typeof b?b:b?q(b,"length"):b=-1;c=0>e||0>c||0!==e-c;-1===a&&(a=null);-1===b&&(b=null);G(this,"@enumerable:change",[this,a,b]);c&&y(this,"length");y(this,"[]");return this},sortBy:function(){var a=arguments;return this.toArray().sort(function(b,c){for(var e=
0;e<a.length;e++){var g=a[e],d=q(b,g),g=q(c,g);if(d=C(d,g))return d}return 0})}})});t("ember-runtime/mixins/evented",["ember-metal/mixin","ember-metal/events","exports"],function(a,m,n){var f=m.addListener,l=m.removeListener,k=m.hasListeners,d=m.sendEvent;n["default"]=a.Mixin.create({on:function(a,c,b){f(this,a,c,b);return this},one:function(a,c,b){b||(b=c,c=null);f(this,a,c,b,!0);return this},trigger:function(a){for(var c=arguments.length,b=Array(c-1),g=1;g<c;g++)b[g-1]=arguments[g];d(this,a,b)},
off:function(a,c,b){l(this,a,c,b);return this},has:function(a){return k(this,a)}})});t("ember-runtime/mixins/freezable",["ember-metal/mixin","ember-metal/property_get","ember-metal/property_set","exports"],function(a,m,n,f){var l=m.get,k=n.set;a=a.Mixin.create({isFrozen:!1,freeze:function(){if(l(this,"isFrozen"))return this;k(this,"isFrozen",!0);return this}});f.Freezable=a;f.FROZEN_ERROR="Frozen object cannot be modified."});t("ember-runtime/mixins/mutable_array","ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/error ember-metal/mixin ember-runtime/mixins/array ember-runtime/mixins/mutable_enumerable ember-runtime/mixins/enumerable exports".split(" "),
function(a,m,n,f,l,k,d,h,c){var b=[],g=a.get,p=n.isArray,u=f["default"];a=l.required;var w=h["default"];c["default"]=l.Mixin.create(k["default"],d["default"],{replace:a(),clear:function(){var a=g(this,"length");if(0===a)return this;this.replace(0,a,b);return this},insertAt:function(a,b){if(a>g(this,"length"))throw new u("Index out of range");this.replace(a,0,[b]);return this},removeAt:function(a,c){if("number"===typeof a){if(0>a||a>=g(this,"length"))throw new u("Index out of range");void 0===c&&(c=
1);this.replace(a,c,b)}return this},pushObject:function(a){this.insertAt(g(this,"length"),a);return a},pushObjects:function(a){if(!w.detect(a)&&!p(a))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");this.replace(g(this,"length"),0,a);return this},popObject:function(){var a=g(this,"length");if(0===a)return null;var b=this.objectAt(a-1);this.removeAt(a-1,1);return b},shiftObject:function(){if(0===g(this,"length"))return null;var a=this.objectAt(0);this.removeAt(0);
return a},unshiftObject:function(a){this.insertAt(0,a);return a},unshiftObjects:function(a){this.replace(0,0,a);return this},reverseObjects:function(){var a=g(this,"length");if(0===a)return this;var b=this.toArray().reverse();this.replace(0,a,b);return this},setObjects:function(a){if(0===a.length)return this.clear();var b=g(this,"length");this.replace(0,b,a);return this},removeObject:function(a){for(var b=g(this,"length")||0;0<=--b;)this.objectAt(b)===a&&this.removeAt(b);return this},addObject:function(a){this.contains(a)||
this.pushObject(a);return this}})});t("ember-runtime/mixins/mutable_enumerable",["ember-metal/enumerable_utils","ember-runtime/mixins/enumerable","ember-metal/mixin","ember-metal/property_events","exports"],function(a,m,n,f,l){var k=n.required,d=f.beginPropertyChanges,h=f.endPropertyChanges,c=a["default"].forEach;l["default"]=n.Mixin.create(m["default"],{addObject:k(Function),addObjects:function(a){d(this);c(a,function(a){this.addObject(a)},this);h(this);return this},removeObject:k(Function),removeObjects:function(a){d(this);
for(var c=a.length-1;0<=c;c--)this.removeObject(a[c]);h(this);return this}})});t("ember-runtime/mixins/observable","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/get_properties ember-metal/set_properties ember-metal/mixin ember-metal/events ember-metal/property_events ember-metal/observer ember-metal/computed ember-metal/is_none exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g,p,u){var w=a["default"],s=m.get,q=m.getWithDefault,e=n.set,r=f.apply,
v=l["default"],y=k["default"],A=h.hasListeners,x=c.beginPropertyChanges,G=c.propertyWillChange,B=c.propertyDidChange,C=c.endPropertyChanges,t=b.addObserver,M=b.addBeforeObserver,L=b.removeObserver,H=b.observersFor,K=g.cacheFor,D=p.isNone,I=Array.prototype.slice;u["default"]=d.Mixin.create({get:function(a){return s(this,a)},getProperties:function(){return r(null,v,[this].concat(I.call(arguments)))},set:function(a,b){e(this,a,b);return this},setProperties:function(a){return y(this,a)},beginPropertyChanges:function(){x();
return this},endPropertyChanges:function(){C();return this},propertyWillChange:function(a){G(this,a);return this},propertyDidChange:function(a){B(this,a);return this},notifyPropertyChange:function(a){this.propertyWillChange(a);this.propertyDidChange(a);return this},addBeforeObserver:function(a,b,c){M(this,a,b,c)},addObserver:function(a,b,c){t(this,a,b,c)},removeObserver:function(a,b,c){L(this,a,b,c)},hasObserverFor:function(a){return A(this,a+":change")},getWithDefault:function(a,b){return q(this,
a,b)},incrementProperty:function(a,b){D(b)&&(b=1);w.assert("Must pass a numeric value to incrementProperty",!isNaN(parseFloat(b))&&isFinite(b));e(this,a,(parseFloat(s(this,a))||0)+b);return s(this,a)},decrementProperty:function(a,b){D(b)&&(b=1);w.assert("Must pass a numeric value to decrementProperty",!isNaN(parseFloat(b))&&isFinite(b));e(this,a,(s(this,a)||0)-b);return s(this,a)},toggleProperty:function(a){e(this,a,!s(this,a));return s(this,a)},cacheFor:function(a){return K(this,a)},observersForKey:function(a){return H(this,
a)}})});t("ember-runtime/mixins/promise_proxy","ember-metal/property_get ember-metal/property_set ember-metal/computed ember-metal/mixin ember-metal/error exports".split(" "),function(a,m,n,f,l,k){function d(a,c){b(a,"isFulfilled",!1);b(a,"isRejected",!1);return c.then(function(c){b(a,"isFulfilled",!0);b(a,"content",c);return c},function(c){b(a,"isRejected",!0);b(a,"reason",c);throw c;},"Ember: PromiseProxy")}function h(a){return function(){var b=c(this,"promise");return b[a].apply(b,arguments)}}
var c=a.get,b=m.set;a=n.computed;var g=l["default"];l=a.not;m=a.or;k["default"]=f.Mixin.create({reason:null,isPending:l("isSettled").readOnly(),isSettled:m("isRejected","isFulfilled").readOnly(),isRejected:!1,isFulfilled:!1,promise:a(function(a,b){if(2===arguments.length)return d(this,b);throw new g("PromiseProxy's promise must be set");}),then:h("then"),"catch":h("catch"),"finally":h("finally")})});t("ember-runtime/mixins/sortable","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/enumerable_utils ember-metal/mixin ember-runtime/mixins/mutable_enumerable ember-runtime/compare ember-metal/observer ember-metal/computed exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b){var g=a["default"],p=m.get,u=h.addObserver,w=h.removeObserver;a=c.computed;m=l.beforeObserver;n=l.observer;var s=f["default"].forEach;b["default"]=l.Mixin.create(k["default"],{sortProperties:null,sortAscending:!0,sortFunction:d["default"],orderBy:function(a,b){var c=0,d=p(this,"sortProperties"),f=p(this,"sortAscending"),h=p(this,"sortFunction");g.assert("you need to define `sortProperties`",!!d);s(d,function(g){0===c&&(c=h.call(this,p(a,g),p(b,g)),0!==c&&!f&&(c*=-1))},
this);return c},destroy:function(){var a=p(this,"content"),b=p(this,"sortProperties");a&&b&&s(a,function(a){s(b,function(b){w(a,b,this,"contentItemSortPropertyDidChange")},this)},this);return this._super()},isSorted:a.bool("sortProperties"),arrangedContent:a("content","sortProperties.@each",function(a,b){var c=p(this,"content"),d=p(this,"isSorted"),f=p(this,"sortProperties"),h=this;return c&&d?(c=c.slice(),c.sort(function(a,b){return h.orderBy(a,b)}),s(c,function(a){s(f,function(b){u(a,b,this,"contentItemSortPropertyDidChange")},
this)},this),g.A(c)):c}),_contentWillChange:m("content",function(){var a=p(this,"content"),b=p(this,"sortProperties");a&&b&&s(a,function(a){s(b,function(b){w(a,b,this,"contentItemSortPropertyDidChange")},this)},this);this._super()}),sortPropertiesWillChange:m("sortProperties",function(){this._lastSortAscending=void 0}),sortPropertiesDidChange:n("sortProperties",function(){this._lastSortAscending=void 0}),sortAscendingWillChange:m("sortAscending",function(){this._lastSortAscending=p(this,"sortAscending")}),
sortAscendingDidChange:n("sortAscending",function(){void 0!==this._lastSortAscending&&p(this,"sortAscending")!==this._lastSortAscending&&p(this,"arrangedContent").reverseObjects()}),contentArrayWillChange:function(a,b,c,g){if(p(this,"isSorted")){var d=p(this,"arrangedContent"),f=a.slice(b,b+c),h=p(this,"sortProperties");s(f,function(a){d.removeObject(a);s(h,function(b){w(a,b,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(a,b,c,g)},contentArrayDidChange:function(a,b,c,g){var d=
p(this,"isSorted"),f=p(this,"sortProperties");d&&(d=a.slice(b,b+g),s(d,function(a){this.insertItemSorted(a);s(f,function(b){u(a,b,this,"contentItemSortPropertyDidChange")},this)},this));return this._super(a,b,c,g)},insertItemSorted:function(a){var b=p(this,"arrangedContent"),c=p(b,"length"),c=this._binarySearch(a,0,c);b.insertAt(c,a)},contentItemSortPropertyDidChange:function(a){var b=p(this,"arrangedContent"),c=b.indexOf(a),g=b.objectAt(c-1),c=b.objectAt(c+1),g=g&&this.orderBy(a,g),c=c&&this.orderBy(a,
c);if(0>g||0<c)b.removeObject(a),this.insertItemSorted(a)},_binarySearch:function(a,b,c){var g,d;if(b===c)return b;d=p(this,"arrangedContent");g=b+Math.floor((c-b)/2);d=d.objectAt(g);d=this.orderBy(d,a);return 0>d?this._binarySearch(a,g+1,c):0<d?this._binarySearch(a,b,g):g}})});t("ember-runtime/mixins/target_action_support","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/mixin ember-metal/computed exports".split(" "),function(a,m,n,f,l,k,d){var h=
a["default"],c=m.get,b=f.typeOf;a=k.computed;l=l.Mixin.create({target:null,action:null,actionContext:null,targetObject:a(function(){var a=c(this,"target");if("string"===b(a)){var d=c(this,a);void 0===d&&(d=c(h.lookup,a));return d}return a}).property("target"),actionContextObject:a(function(){var a=c(this,"actionContext");if("string"===b(a)){var d=c(this,a);void 0===d&&(d=c(h.lookup,a));return d}return a}).property("actionContext"),triggerAction:function(a){function b(a,c){var e=[];c&&e.push(c);return e.concat(a)}
a=a||{};var d=a.action||c(this,"action"),f=a.target||c(this,"targetObject");a=a.actionContext;"undefined"===typeof a&&(a=c(this,"actionContextObject")||this);return f&&d?(f.send?d=f.send.apply(f,b(a,d)):(h.assert("The action '"+d+"' did not exist on "+f,"function"===typeof f[d]),d=f[d].apply(f,b(a))),!1!==d&&(d=!0),d):!1}});d["default"]=l});t("ember-runtime/system/application",["ember-runtime/system/namespace","exports"],function(a,m){m["default"]=a["default"].extend()});t("ember-runtime/system/array_proxy",
"ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/computed ember-metal/mixin ember-metal/property_events ember-metal/error ember-runtime/system/object ember-runtime/mixins/mutable_array ember-runtime/mixins/enumerable ember-runtime/system/string exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g,p,u){var w=a["default"],s=m.get,q=f.isArray,e=f.apply;a=l.computed;m=k.beforeObserver;k=k.observer;var r=d.beginPropertyChanges,v=d.endPropertyChanges,y=h["default"],
t=g["default"],x=p.fmt,G=[];d=a.alias;h=w.K;c=c["default"].extend(b["default"],{content:null,arrangedContent:d("content"),objectAtContent:function(a){return s(this,"arrangedContent").objectAt(a)},replaceContent:function(a,b,c){s(this,"content").replace(a,b,c)},_contentWillChange:m("content",function(){this._teardownContent()}),_teardownContent:function(){var a=s(this,"content");a&&a.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:h,
contentArrayDidChange:h,_contentDidChange:k("content",function(){var a=s(this,"content");w.assert("Can't set ArrayProxy's content to itself",a!==this);this._setupContent()}),_setupContent:function(){var a=s(this,"content");a&&(w.assert(x("ArrayProxy expects an Array or Ember.ArrayProxy, but you passed %@",[typeof a]),q(a)||a.isDestroyed),a.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"}))},_arrangedContentWillChange:m("arrangedContent",function(){var a=
s(this,"arrangedContent"),b=a?s(a,"length"):0;this.arrangedContentArrayWillChange(this,0,b,void 0);this.arrangedContentWillChange(this);this._teardownArrangedContent(a)}),_arrangedContentDidChange:k("arrangedContent",function(){var a=s(this,"arrangedContent"),b=a?s(a,"length"):0;w.assert("Can't set ArrayProxy's content to itself",a!==this);this._setupArrangedContent();this.arrangedContentDidChange(this);this.arrangedContentArrayDidChange(this,0,void 0,b)}),_setupArrangedContent:function(){var a=s(this,
"arrangedContent");a&&(w.assert(x("ArrayProxy expects an Array or Ember.ArrayProxy, but you passed %@",[typeof a]),q(a)||a.isDestroyed),a.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"}))},_teardownArrangedContent:function(){var a=s(this,"arrangedContent");a&&a.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:h,arrangedContentDidChange:h,objectAt:function(a){return s(this,
"content")&&this.objectAtContent(a)},length:a(function(){var a=s(this,"arrangedContent");return a?s(a,"length"):0}),_replace:function(a,b,c){var e=s(this,"content");w.assert("The content property of "+this.constructor+" should be set before modifying it",e);e&&this.replaceContent(a,b,c);return this},replace:function(){if(s(this,"arrangedContent")===s(this,"content"))e(this,this._replace,arguments);else throw new y("Using replace on an arranged ArrayProxy is not allowed.");},_insertAt:function(a,b){if(a>
s(this,"content.length"))throw new y("Index out of range");this._replace(a,0,[b]);return this},insertAt:function(a,b){if(s(this,"arrangedContent")===s(this,"content"))return this._insertAt(a,b);throw new y("Using insertAt on an arranged ArrayProxy is not allowed.");},removeAt:function(a,b){if("number"===typeof a){var c=s(this,"content"),e=s(this,"arrangedContent"),g=[],d;if(0>a||a>=s(this,"length"))throw new y("Index out of range");void 0===b&&(b=1);for(d=a;d<a+b;d++)g.push(c.indexOf(e.objectAt(d)));
g.sort(function(a,b){return b-a});r();for(d=0;d<g.length;d++)this._replace(g[d],1,G);v()}return this},pushObject:function(a){this._insertAt(s(this,"content.length"),a);return a},pushObjects:function(a){if(!t.detect(a)&&!q(a))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");this._replace(s(this,"length"),0,a);return this},setObjects:function(a){if(0===a.length)return this.clear();var b=s(this,"length");this._replace(0,b,a);return this},unshiftObject:function(a){this._insertAt(0,
a);return a},unshiftObjects:function(a){this._replace(0,0,a);return this},slice:function(){var a=this.toArray();return a.slice.apply(a,arguments)},arrangedContentArrayWillChange:function(a,b,c,e){this.arrayContentWillChange(b,c,e)},arrangedContentArrayDidChange:function(a,b,c,e){this.arrayContentDidChange(b,c,e)},init:function(){this._super();this._setupContent();this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent();this._teardownContent()}});u["default"]=c});t("ember-runtime/system/container",
["ember-metal/property_set","exports"],function(a,m){var n=a["default"],f=S("container")["default"];f.set=n;m["default"]=f});t("ember-runtime/system/core_object","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/platform ember-metal/watching ember-metal/chains ember-metal/events ember-metal/mixin ember-metal/enumerable_utils ember-metal/error ember-runtime/keys ember-runtime/mixins/action_handler ember-metal/properties ember-metal/binding ember-metal/computed ember-metal/run_loop exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q,e,r){function v(){var a=!1,b,c,e=function(){a||e.proto();da(this,C,ca);da(this,"__nextSuper",T);var g=E(this),d=g.proto;g.proto=this;if(b){var f=b;b=null;G(this,this.reopen,f)}if(c){f=c;c=null;for(var r=this.concatenatedProperties,q=0,h=f.length;q<h;q++){var p=f[q];t.assert("Ember.Object.create no longer supports mixing in other definitions, use createWithMixins instead.",!(p instanceof N));if("object"!==typeof p&&void 0!==p)throw new z("Ember.Object.create only accepts objects.");
if(p)for(var k=F(p),l=0,m=k.length;l<m;l++){var s=k[l];if(p.hasOwnProperty(s)){var n=p[s];if(I.test(s)){var v=g.bindings;v?g.hasOwnProperty("bindings")||(v=g.bindings=Y(g.bindings)):v=g.bindings={};v[s]=n}v=g.descs[s];t.assert("Ember.Object.create no longer supports defining computed properties. Define computed properties using extend() or reopen() before calling create().",!(n instanceof X));t.assert("Ember.Object.create no longer supports defining methods that call _super.",!("function"===typeof n&&
-1!==n.toString().indexOf("._super")));t.assert("`actions` must be provided at extend time, not at create time, when Ember.ActionHandler is used (i.e. views, controllers & routes).",!("actions"===s&&P.detect(this)));if(r&&0<=W(r,s))var u=this[s],n=u?"function"===typeof u.concat?u.concat(n):L(u).concat(n):L(n);v?v.set(this,s,n):"function"===typeof this.setUnknownProperty&&!(s in this)?this.setUnknownProperty(s,n):S?O(this,s,null,n):this[s]=n}}}}J(this,g);G(this,this.init,arguments);g.proto=d;K(this);
D(this,"init")};e.toString=N.prototype.toString;e.willReopen=function(){a&&(e.PrototypeMixin=N.create(e.PrototypeMixin));a=!1};e._initMixins=function(a){b=a};e._initProperties=function(a){c=a};e.proto=function(){var b=e.superclass;b&&b.proto();a||(a=!0,e.PrototypeMixin.applyPartial(e.prototype),H(e.prototype));return this.prototype};return e}function y(a){return function(){return a}}var t=a["default"],x=f.guidFor,G=f.apply,B=f.generateGuid,C=f.GUID_KEY,E=f.meta,M=f.META_KEY,L=f.makeArray,H=k.rewatch,
K=d.finishChains,D=h.sendEvent,I=c.IS_BINDING,N=c.Mixin;a=c.required;var z=g["default"],F=p["default"],P=u["default"],O=w.defineProperty,R=s.Binding,X=q.ComputedProperty,U=k.destroy,Y=l.create,da=l.platform.defineProperty,ea=e["default"].schedule,V=N._apply,J=N.finishPartial,Z=N.prototype.reopen,S=t.ENV.MANDATORY_SETTER,W=b["default"].indexOf;k=t.K;var T={configurable:!0,writable:!0,enumerable:!1,value:void 0},ca={configurable:!0,writable:!0,enumerable:!1,value:null};l=v();l.toString=function(){return"Ember.CoreObject"};
l.PrototypeMixin=N.create({reopen:function(){V(this,arguments,!0);return this},init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){if(!this.isDestroying)return this.isDestroying=!0,ea("actions",this,this.willDestroy),ea("destroy",this,this._scheduledDestroy),this},willDestroy:k,_scheduledDestroy:function(){this.isDestroyed||(U(this),this.isDestroyed=!0)},bind:function(a,b){b instanceof R||(b=R.from(b));b.to(a).connect(this);return b},toString:function(){var a=
"function"===typeof this.toStringExtension?":"+this.toStringExtension():"",a="<"+this.constructor.toString()+":"+x(this)+a+">";this.toString=y(a);return a}});l.PrototypeMixin.ownerConstructor=l;t.config.overridePrototypeMixin&&t.config.overridePrototypeMixin(l.PrototypeMixin);l.__super__=null;k=N.create({ClassMixin:a(),PrototypeMixin:a(),isClass:!0,isMethod:!1,extend:function(){var a=v(),b;a.ClassMixin=N.create(this.ClassMixin);a.PrototypeMixin=N.create(this.PrototypeMixin);a.ClassMixin.ownerConstructor=
a;a.PrototypeMixin.ownerConstructor=a;Z.apply(a.PrototypeMixin,arguments);a.superclass=this;a.__super__=this.prototype;b=a.prototype=Y(this.prototype);b.constructor=a;B(b);E(b).proto=b;a.ClassMixin.apply(a);return a},createWithMixins:function(){0<arguments.length&&this._initMixins(arguments);return new this},create:function(){0<arguments.length&&this._initProperties(arguments);return new this},reopen:function(){this.willReopen();G(this.PrototypeMixin,Z,arguments);return this},reopenClass:function(){G(this.ClassMixin,
Z,arguments);V(this,arguments,!1);return this},detect:function(a){if("function"!==typeof a)return!1;for(;a;){if(a===this)return!0;a=a.superclass}return!1},detectInstance:function(a){return a instanceof this},metaForProperty:function(a){var b=this.proto()[M],b=b&&b.descs[a];t.assert("metaForProperty() could not find a computed property with key '"+a+"'.",!!b&&b instanceof X);return b._meta||{}},eachComputedProperty:function(a,b){var c=this.proto(),c=E(c).descs,e={},g,d;for(d in c)g=c[d],g instanceof
X&&a.call(b||this,d,g._meta||e)}});k.ownerConstructor=l;t.config.overrideClassMixin&&t.config.overrideClassMixin(k);l.ClassMixin=k;k.apply(l);r["default"]=l});t("ember-runtime/system/deferred",["ember-runtime/mixins/deferred","ember-metal/property_get","ember-runtime/system/object","exports"],function(a,m,n,f){var l=n["default"].extend(a["default"]);l.reopenClass({promise:function(a,d){var f=l.create();a.call(d,f);return f}});f["default"]=l});t("ember-runtime/system/each_proxy","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/enumerable_utils ember-metal/array ember-runtime/mixins/array ember-runtime/system/object ember-metal/computed ember-metal/observer ember-metal/events ember-metal/properties ember-metal/property_events exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w){function s(a,b,c,g,d){var f=c._objects,r;f||(f=c._objects={});for(;--d>=g;)if(r=a.objectAt(d))e.assert("When using @each to observe the array "+a+", the array must return an object","instance"===C(r)||"object"===C(r)),x(r,b,c,"contentKeyWillChange"),t(r,b,c,"contentKeyDidChange"),r=v(r),f[r]||(f[r]=[]),f[r].push(d)}function q(a,b,c,e,g){var d=c._objects;d||(d=c._objects={});for(var f;--g>=e;)if(f=a.objectAt(g))G(f,b,c,"contentKeyWillChange"),B(f,b,c,"contentKeyDidChange"),
f=v(f),f=d[f],f[y.call(f,g)]=null}var e=a["default"],r=m.get,v=f.guidFor,y=k.indexOf;a=h["default"];c=c.computed;var t=b.addObserver,x=b.addBeforeObserver,G=b.removeBeforeObserver,B=b.removeObserver,C=f.typeOf,E=g.watchedEvents,M=p.defineProperty,L=u.beginPropertyChanges,H=u.propertyDidChange,K=u.propertyWillChange,D=u.endPropertyChanges,I=u.changeProperties,N=l["default"].forEach,z=a.extend(d["default"],{init:function(a,b,c){this._super();this._keyName=b;this._owner=c;this._content=a},objectAt:function(a){return(a=
this._content.objectAt(a))&&r(a,this._keyName)},length:c(function(){var a=this._content;return a?r(a,"length"):0})}),F=/^.+:(before|change)$/;f=a.extend({init:function(a){this._super();this._content=a;a.addArrayObserver(this);N(E(this),function(a){this.didAddListener(a)},this)},unknownProperty:function(a,b){var c;c=new z(this._content,a,this);M(this,a,null,c);this.beginObservingContentKey(a);return c},arrayWillChange:function(a,b,c,e){e=this._keys;var g;c=0<c?b+c:-1;L(this);for(g in e)e.hasOwnProperty(g)&&
(0<c&&q(a,g,this,b,c),K(this,g));K(this._content,"@each");D(this)},arrayDidChange:function(a,b,c,e){var g=this._keys,d;d=0<e?b+e:-1;I(function(){for(var c in g)g.hasOwnProperty(c)&&(0<d&&s(a,c,this,b,d),H(this,c));H(this._content,"@each")},this)},didAddListener:function(a){F.test(a)&&this.beginObservingContentKey(a.slice(0,-7))},didRemoveListener:function(a){F.test(a)&&this.stopObservingContentKey(a.slice(0,-7))},beginObservingContentKey:function(a){var b=this._keys;b||(b=this._keys={});if(b[a])b[a]++;
else{b[a]=1;var b=this._content,c=r(b,"length");s(b,a,this,0,c)}},stopObservingContentKey:function(a){var b=this._keys;if(b&&0<b[a]&&0>=--b[a]){var b=this._content,c=r(b,"length");q(b,a,this,0,c)}},contentKeyWillChange:function(a,b){K(this,b)},contentKeyDidChange:function(a,b){H(this,b)}});w.EachArray=z;w.EachProxy=f});t("ember-runtime/system/lazy_load",["ember-metal/core","ember-metal/array","ember-runtime/system/native_array","exports"],function(a,m,n,f){var l=a["default"],k=m.forEach,d=l.ENV.EMBER_LOAD_HOOKS||
{},h={};f.onLoad=function(a,b){var g;d[a]=d[a]||l.A();d[a].pushObject(b);(g=h[a])&&b(g)};f.runLoadHooks=function(a,b){h[a]=b;if("object"===typeof window&&"function"===typeof window.dispatchEvent&&"function"===typeof CustomEvent){var g=new CustomEvent(a,{detail:b,name:a});window.dispatchEvent(g)}d[a]&&k.call(d[a],function(a){a(b)})}});t("ember-runtime/system/namespace","ember-metal/core ember-metal/property_get ember-metal/array ember-metal/utils ember-metal/mixin ember-runtime/system/object exports".split(" "),
function(a,m,n,f,l,k,d){function h(a,b,c){var d=a.length;v[a.join(".")]=b;for(var f in b)if(y.call(b,f)){var r=b[f];a[d]=f;r&&r.toString===g?(r.toString=u(a.join(".")),r[x]=a.join(".")):r&&r.isNamespace&&!c[e(r)]&&(c[e(r)]=!0,h(a,r,c))}a.length=d}function c(){var a=w.lookup,b,c;if(!r.PROCESSED)for(var e in a)if(t.test(e)&&(!a.hasOwnProperty||a.hasOwnProperty(e))){try{c=(b=a[e])&&b.isNamespace}catch(g){continue}c&&(b[x]=e)}}function b(a){if(a=a.superclass)return a[x]?a[x]:b(a)}function g(){!w.BOOTED&&
!this[x]&&p();var a;this[x]?a=this[x]:this._toString?a=this._toString:(a=(a=b(this))?"(subclass of "+a+")":"(unknown mixin)",this.toString=u(a));return a}function p(){var a=!r.PROCESSED,b=w.anyUnprocessedMixins;a&&(c(),r.PROCESSED=!0);if(a||b){for(var a=r.NAMESPACES,e=0,g=a.length;e<g;e++)b=a[e],h([b.toString()],b,{});w.anyUnprocessedMixins=!1}}function u(a){return function(){return a}}var w=a["default"],s=m.get,q=n.indexOf;a=f.GUID_KEY;var e=f.guidFor;f=l.Mixin;var r=k["default"].extend({isNamespace:!0,
init:function(){r.NAMESPACES.push(this);r.PROCESSED=!1},toString:function(){var a=s(this,"name");if(a)return a;c();return this[x]},nameClasses:function(){h([this.toString()],this,{})},destroy:function(){var a=r.NAMESPACES,b=this.toString();b&&(w.lookup[b]=void 0,delete r.NAMESPACES_BY_ID[b]);a.splice(q.call(a,this),1);this._super()}});r.reopenClass({NAMESPACES:[w],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:p,byName:function(a){w.BOOTED||p();return v[a]}});var v=r.NAMESPACES_BY_ID,y={}.hasOwnProperty,
t=/^[A-Z]/,x=w.NAME_KEY=a+"_name";f.prototype.toString=g;d["default"]=r});t("ember-runtime/system/native_array","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/enumerable_utils ember-metal/mixin ember-runtime/mixins/array ember-runtime/mixins/mutable_array ember-runtime/mixins/observable ember-runtime/mixins/copyable ember-runtime/mixins/freezable ember-runtime/copy exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g,p){a=a["default"];var u=m.get;m=f["default"];var w=
k["default"],s=b.FROZEN_ERROR,q=g["default"],e=m._replace;k=m.forEach;var r=l.Mixin.create(d["default"],h["default"],c["default"],{get:function(a){return"length"===a?this.length:"number"===typeof a?this[a]:this._super(a)},objectAt:function(a){return this[a]},replace:function(a,b,c){if(this.isFrozen)throw s;var g=c?u(c,"length"):0;this.arrayContentWillChange(a,b,g);0===g?this.splice(a,b):e(this,a,b,c);this.arrayContentDidChange(a,b,g);return this},unknownProperty:function(a,b){var c;void 0!==b&&void 0===
c&&(c=this[a]=b);return c},indexOf:function(a,b){var c,e=this.length;b=void 0===b?0:0>b?Math.ceil(b):Math.floor(b);0>b&&(b+=e);for(c=b;c<e;c++)if(this[c]===a)return c;return-1},lastIndexOf:function(a,b){var c;c=this.length;b=void 0===b?c-1:0>b?Math.ceil(b):Math.floor(b);0>b&&(b+=c);for(c=b;0<=c;c--)if(this[c]===a)return c;return-1},copy:function(a){return a?this.map(function(a){return q(a,!0)}):this.slice()}}),v=["length"];k(r.keys(),function(a){Array.prototype[a]&&v.push(a)});0<v.length&&(r=r.without.apply(r,
v));var y=function(a){void 0===a&&(a=[]);return w.detect(a)?a:r.apply(a)};r.activate=function(){r.apply(Array.prototype);y=function(a){return a||[]}};(!0===a.EXTEND_PROTOTYPES||a.EXTEND_PROTOTYPES.Array)&&r.activate();a.A=y;p.A=y;p.NativeArray=r;p["default"]=r});t("ember-runtime/system/object",["ember-runtime/system/core_object","ember-runtime/mixins/observable","exports"],function(a,m,n){a=a["default"].extend(m["default"]);a.toString=function(){return"Ember.Object"};n["default"]=a});t("ember-runtime/system/object_proxy",
"ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/observer ember-metal/property_events ember-metal/computed ember-metal/properties ember-metal/mixin ember-runtime/system/string ember-runtime/system/object exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g,p){function u(a,b){var c=b.slice(8);c in this||G(this,c)}function w(a,b){var c=b.slice(8);c in this||B(this,c)}var s=a["default"],q=m.get,e=n.set,r=f.meta,v=l.addObserver,y=l.removeObserver,t=l.addBeforeObserver,
x=l.removeBeforeObserver,G=k.propertyWillChange,B=k.propertyDidChange;a=d.computed;var C=h.defineProperty;h=c.observer;var E=b.fmt;b=g["default"].extend({content:null,_contentDidChange:h("content",function(){s.assert("Can't set ObjectProxy's content to itself",q(this,"content")!==this)}),isTruthy:a.bool("content"),_debugContainerKey:null,willWatchProperty:function(a){a="content."+a;t(this,a,null,u);v(this,a,null,w)},didUnwatchProperty:function(a){a="content."+a;x(this,a,null,u);y(this,a,null,w)},
unknownProperty:function(a){var b=q(this,"content");if(b)return q(b,a)},setUnknownProperty:function(a,b){if(r(this).proto===this)return C(this,a,null,b),b;var c=q(this,"content");s.assert(E("Cannot delegate set('%@', %@) to the 'content' property of object proxy %@: its 'content' is undefined.",[a,b,this]),c);return e(c,a,b)}});p["default"]=b});t("ember-runtime/system/set","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/utils ember-metal/is_none ember-runtime/system/string ember-runtime/system/core_object ember-runtime/mixins/mutable_enumerable ember-runtime/mixins/enumerable ember-runtime/mixins/copyable ember-runtime/mixins/freezable ember-metal/error ember-metal/property_events ember-metal/mixin ember-metal/computed exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,w,s,q){var e=m.get,r=n.set,v=f.guidFor,y=l.isNone,t=k.fmt,x=c["default"],G=g.FROZEN_ERROR,B=p["default"],C=u.propertyWillChange,E=u.propertyDidChange;a=w.aliasMethod;s=s.computed;q["default"]=d["default"].extend(h["default"],b["default"],g.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new B(G);var a=e(this,"length");if(0===a)return this;var b;this.enumerableContentWillChange(a,0);C(this,"firstObject");C(this,"lastObject");for(var c=0;c<a;c++)b=v(this[c]),
delete this[b],delete this[c];r(this,"length",0);E(this,"firstObject");E(this,"lastObject");this.enumerableContentDidChange(a,0);return this},isEqual:function(a){if(!x.detect(a))return!1;var b=e(this,"length");if(e(a,"length")!==b)return!1;for(;0<=--b;)if(!a.contains(this[b]))return!1;return!0},add:a("addObject"),remove:a("removeObject"),pop:function(){if(e(this,"isFrozen"))throw new B(G);var a=0<this.length?this[this.length-1]:null;this.remove(a);return a},push:a("addObject"),shift:a("pop"),unshift:a("push"),
addEach:a("addObjects"),removeEach:a("removeObjects"),init:function(a){this._super();a&&this.addObjects(a)},nextObject:function(a){return this[a]},firstObject:s(function(){return 0<this.length?this[0]:void 0}),lastObject:s(function(){return 0<this.length?this[this.length-1]:void 0}),addObject:function(a){if(e(this,"isFrozen"))throw new B(G);if(y(a))return this;var b=v(a),c=this[b],g=e(this,"length");if(0<=c&&c<g&&this[c]===a)return this;c=[a];this.enumerableContentWillChange(null,c);C(this,"lastObject");
g=e(this,"length");this[b]=g;this[g]=a;r(this,"length",g+1);E(this,"lastObject");this.enumerableContentDidChange(null,c);return this},removeObject:function(a){if(e(this,"isFrozen"))throw new B(G);if(y(a))return this;var b=v(a),c=this[b],g=e(this,"length"),d=0===c,f=c===g-1,q;0<=c&&(c<g&&this[c]===a)&&(q=[a],this.enumerableContentWillChange(q,null),d&&C(this,"firstObject"),f&&C(this,"lastObject"),c<g-1&&(a=this[g-1],this[c]=a,this[v(a)]=c),delete this[b],delete this[g-1],r(this,"length",g-1),d&&E(this,
"firstObject"),f&&E(this,"lastObject"),this.enumerableContentDidChange(q,null));return this},contains:function(a){return 0<=this[v(a)]},copy:function(){var a=new this.constructor,b=e(this,"length");for(r(a,"length",b);0<=--b;)a[b]=this[b],a[v(this[b])]=b;return a},toString:function(){var a=this.length,b,c=[];for(b=0;b<a;b++)c[b]=this[b];return t("Ember.Set<%@>",[c.join(",")])}})});t("ember-runtime/system/string",["ember-metal/core","ember-metal/utils","exports"],function(a,m,n){function f(a,b){if(!w(b)||
2<arguments.length)b=Array.prototype.slice.call(arguments,1);var c=0;return a.replace(/%@([0-9]+)?/g,function(a,e){e=e?parseInt(e,10)-1:c++;a=b[e];return null===a?"(null)":void 0===a?"":s(a)})}function l(a,b){if(!w(b)||2<arguments.length)b=Array.prototype.slice.call(arguments,1);a=u.STRINGS[a]||a;return f(a,b)}function k(a){return a.split(/\s+/)}function d(a){return a.replace(r,"$1_$2").toLowerCase()}function h(a){var b=e,c;if(b.hasOwnProperty(a))return b[a];c=d(a).replace(q,"-");return b[a]=c}function c(a){return a.replace(v,
function(a,b,c){return c?c.toUpperCase():""}).replace(/^([A-Z])/,function(a,b,c){return a.toLowerCase()})}function b(a){a=a.split(".");for(var b=[],e=0,g=a.length;e<g;e++){var d=c(a[e]);b.push(d.charAt(0).toUpperCase()+d.substr(1))}return b.join(".")}function g(a){return a.replace(y,"$1_$2").replace(t,"_").toLowerCase()}function p(a){return a.charAt(0).toUpperCase()+a.substr(1)}var u=a["default"],w=m.isArray,s=m.inspect,q=/[ _]/g,e={},r=/([a-z\d])([A-Z])/g,v=/(\-|_|\.|\s)+(.)?/g,y=/([a-z\d])([A-Z]+)/g,
t=/\-|\s+/g;u.STRINGS={};n["default"]={fmt:f,loc:l,w:k,decamelize:d,dasherize:h,camelize:c,classify:b,underscore:g,capitalize:p};n.fmt=f;n.loc=l;n.w=k;n.decamelize=d;n.dasherize=h;n.camelize=c;n.classify=b;n.underscore=g;n.capitalize=p});t("ember-runtime/system/subarray",["ember-metal/property_get","ember-metal/error","ember-metal/enumerable_utils","exports"],function(a,m,n,f){function l(a,c){this.type=a;this.count=c}function k(a){1>arguments.length&&(a=0);this._operations=0<a?[new l(c,a)]:[]}var d=
m["default"],h=n["default"],c="r";f["default"]=k;k.prototype={addItem:function(a,g){var d=-1,f=g?c:"f",h=this;this._findOperation(a,function(k,q,e,r,m){var n;f===k.type?++k.count:a===e?h._operations.splice(q,0,new l(f,1)):(n=new l(f,1),r=new l(k.type,r-a+1),k.count=a-e,h._operations.splice(q+1,0,n,r));g&&(d=k.type===c?m+(a-e):m);h._composeAt(q)},function(a){h._operations.push(new l(f,1));g&&(d=a);h._composeAt(h._operations.length-1)});return d},removeItem:function(a){var g=-1,f=this;this._findOperation(a,
function(d,h,k,q,e){d.type===c&&(g=e+(a-k));1<d.count?--d.count:(f._operations.splice(h,1),f._composeAt(h))},function(){throw new d("Can't remove an item that has never been added.");});return g},_findOperation:function(a,g,d){var f,h,k,q,e,r=0;f=q=0;for(h=this._operations.length;f<h;q=e+1,++f){k=this._operations[f];e=q+k.count-1;if(a>=q&&a<=e){g(k,f,q,e,r);return}k.type===c&&(r+=k.count)}d(r)},_composeAt:function(a){var c=this._operations[a],d;c&&(0<a&&(d=this._operations[a-1],d.type===c.type&&(c.count+=
d.count,this._operations.splice(a-1,1),--a)),a<this._operations.length-1&&(d=this._operations[a+1],d.type===c.type&&(c.count+=d.count,this._operations.splice(a+1,1))))},toString:function(){var a="";h.forEach(this._operations,function(c){a+=" "+c.type+":"+c.count});return a.substring(1)}}});t("ember-runtime/system/tracked_array",["ember-metal/property_get","ember-metal/enumerable_utils","exports"],function(a,m,n){function f(a){1>arguments.length&&(a=[]);var g=d(a,"length");this._operations=g?[new l(c,
g,a)]:[]}function l(a,c,d){this.type=a;this.count=c;this.items=d}function k(a,c,d,f){this.operation=a;this.index=c;this.split=d;this.rangeStart=f}var d=a.get,h=m["default"].forEach,c="r";n["default"]=f;f.RETAIN=c;f.INSERT="i";f.DELETE="d";f.prototype={addItems:function(a,c){var f=d(c,"length");if(!(1>f)){var h=this._findArrayOperation(a),k=h.operation,m=h.index,q=h.rangeStart,f=new l("i",f,c);k?h.split?(this._split(m,a-q,f),h=m+1):(this._operations.splice(m,0,f),h=m):(this._operations.push(f),h=m);
this._composeInsert(h)}},removeItems:function(a,c){if(!(1>c)){var d=this._findArrayOperation(a),f=d.index,h=d.rangeStart,k;k=new l("d",c);d.split?(this._split(f,a-h,k),d=f+1):(this._operations.splice(f,0,k),d=f);return this._composeDelete(d)}},apply:function(a){var g=[],d=0;h(this._operations,function(c,f){a(c.items,d,c.type,f);"d"!==c.type&&(d+=c.count,g=g.concat(c.items))});this._operations=[new l(c,g.length,g)]},_findArrayOperation:function(a){var c,d,f=!1,h,l,q;c=l=0;for(d=this._operations.length;c<
d;++c)if(h=this._operations[c],"d"!==h.type)if(q=l+h.count-1,a===l)break;else if(a>l&&a<=q){f=!0;break}else l=q+1;return new k(h,c,f,l)},_split:function(a,c,d){var f=this._operations[a],h=f.items.slice(c),h=new l(f.type,h.length,h);f.count=c;f.items=f.items.slice(0,c);this._operations.splice(a+1,0,d,h)},_composeInsert:function(a){var c=this._operations[a],d=this._operations[a-1],f=this._operations[a+1],h=f&&f.type;"i"===(d&&d.type)?(d.count+=c.count,d.items=d.items.concat(c.items),"i"===h?(d.count+=
f.count,d.items=d.items.concat(f.items),this._operations.splice(a,2)):this._operations.splice(a,1)):"i"===h&&(c.count+=f.count,c.items=c.items.concat(f.items),this._operations.splice(a+1,1))},_composeDelete:function(a){var c=this._operations[a],d=c.count,f=this._operations[a-1],h,k,q=!1,e=[];"d"===(f&&f.type)&&(c=f,a-=1);for(var r=a+1;0<d;++r)f=this._operations[r],h=f.type,k=f.count,"d"===h?c.count+=k:(k>d?(e=e.concat(f.items.splice(0,d)),f.count-=d,r-=1,k=d,d=0):(k===d&&(q=!0),e=e.concat(f.items),
d-=k),"i"===h&&(c.count-=k));0<c.count?this._operations.splice(a+1,r-1-a):this._operations.splice(a,q?2:1);return e},toString:function(){var a="";h(this._operations,function(c){a+=" "+c.type+":"+c.count});return a.substring(1)}}});t("ember-testing","ember-metal/core ember-testing/initializers ember-testing/support ember-testing/setup_for_testing ember-testing/test ember-testing/adapters/adapter ember-testing/adapters/qunit ember-testing/helpers".split(" "),function(a,m,n,f,l,k,d,h){a=a["default"];
f=f["default"];k=k["default"];d=d["default"];a.Test=l["default"];a.Test.Adapter=k;a.Test.QUnitAdapter=d;a.setupForTesting=f});t("ember-testing/adapters/adapter",["ember-metal/core","ember-metal/utils","ember-runtime/system/object","exports"],function(a,m,n,f){a=a["default"];n=n["default"].extend({asyncStart:a.K,asyncEnd:a.K,exception:function(a){throw a;}});f["default"]=n});t("ember-testing/adapters/qunit",["ember-testing/adapters/adapter","ember-metal/utils","exports"],function(a,m,n){var f=m.inspect;
n["default"]=a["default"].extend({asyncStart:function(){QUnit.stop()},asyncEnd:function(){QUnit.start()},exception:function(a){ok(!1,f(a))}})});t("ember-testing/helpers",["ember-metal/property_get","ember-metal/error","ember-metal/run_loop","ember-views/system/jquery","ember-testing/test"],function(a,m,n,f,l){function k(a,b,g,f,h){3===arguments.length&&(f=g,g=null);"undefined"===typeof h&&(h={});var k=d(a,b,g),l=u.Event(f,h);p(k,"trigger",l);return c(a)}function d(a,b,c){a=h(a,b,c);if(0===a.length)throw new g("Element "+
b+" not found.");return a}function h(a,c,d){d=d||b(a,"rootElement");return a.$(c,d)}function c(a,b){return w.promise(function(c){1===++s&&w.adapter.asyncStart();var d=setInterval(function(){if(!a.__container__.lookup("router:main").router.activeTransition&&!w.pendingAjaxRequests&&!p.hasScheduledTimers()&&!p.currentRunLoop&&(!w.waiters||!w.waiters.any(function(a){return!a[1].call(a[0])})))clearInterval(d),0===--s&&w.adapter.asyncEnd(),p(null,c,b)},10)})}var b=a.get,g=m["default"],p=n["default"],u=
f["default"],w=l["default"];a=w.registerHelper;m=w.registerAsyncHelper;var s=0;m("visit",function(a,b){var d=a.__container__.lookup("router:main");d.location.setURL(b);0<a._readinessDeferrals?(d.initialURL=b,p(a,"advanceReadiness"),delete d.initialURL):p(a,a.handleURL,b);return c(a)});m("click",function(a,b,g){b=d(a,b,g);p(b,"mousedown");b.is(":input")&&(g=b.prop("type"),"checkbox"!==g&&("radio"!==g&&"hidden"!==g)&&p(b,function(){!document.hasFocus||document.hasFocus()?this.focus():this.trigger("focusin")}));
p(b,"mouseup");p(b,"click");return c(a)});m("keyEvent",function(a,b,c,d,g){"undefined"===typeof g&&(g=d,d=c,c=null);return k(a,b,c,d,{keyCode:g,which:g})});m("fillIn",function(a,b,g,f){var h;"undefined"===typeof f&&(f=g,g=null);h=d(a,b,g);p(function(){h.val(f).change()});return c(a)});a("find",h);a("findWithAssert",d);m("wait",c);m("andThen",function(a,b){return c(a,b(a))});a("currentRouteName",function(a){a=a.__container__.lookup("controller:application");return b(a,"currentRouteName")});a("currentPath",
function(a){a=a.__container__.lookup("controller:application");return b(a,"currentPath")});a("currentURL",function(a){a=a.__container__.lookup("router:main");return b(a,"location").getURL()});m("triggerEvent",k)});t("ember-testing/initializers",["ember-runtime/system/lazy_load"],function(a){a=a.onLoad;a("Ember.Application",function(a){a.initializers["deferReadiness in `testing` mode"]||a.initializer({name:"deferReadiness in `testing` mode",initialize:function(a,f){f.testing&&f.deferReadiness()}})})});
t("ember-testing/setup_for_testing",["ember-metal/core","ember-testing/adapters/qunit","ember-views/system/jquery","exports"],function(a,m,n,f){function l(a,c){g.push(c);b.pendingAjaxRequests=g.length}function k(a,c){for(var d=0;d<g.length;d++)c===g[d]&&g.splice(d,1);b.pendingAjaxRequests=g.length}var d=a["default"],h=m["default"],c=n["default"],b,g;f["default"]=function(){b||(b=S("ember-testing/test")["default"]);d.testing=!0;b.adapter||(b.adapter=h.create());g=[];b.pendingAjaxRequests=g.length;
c(document).off("ajaxSend",l);c(document).off("ajaxComplete",k);c(document).on("ajaxSend",l);c(document).on("ajaxComplete",k)}});t("ember-testing/support",["ember-metal/core","ember-views/system/jquery"],function(a,m){function n(a){l('<input type="checkbox">').css({position:"absolute",left:"-1000px",top:"-1000px"}).appendTo("body").on("click",a).trigger("click").remove()}var f=a["default"],l=m["default"];l(function(){n(function(){!this.checked&&!l.event.special.click&&(l.event.special.click={trigger:function(){if(l.nodeName(this,
"input")&&"checkbox"===this.type&&this.click)return this.click(),!1}})});n(function(){f.warn("clicked checkboxes should be checked! the jQuery patch didn't work",this.checked)})})});t("ember-testing/test","ember-metal/core ember-metal/run_loop ember-metal/platform ember-runtime/compare ember-runtime/ext/rsvp ember-testing/setup_for_testing ember-application/system/application exports".split(" "),function(a,m,n,f,l,k,d,h){function c(a,c){var e=v[c].method,d=v[c].meta;return function(){var c=r.call(arguments),
g=A.lastPromise;c.unshift(a);if(!d.wait)return e.apply(a,c);g?b(function(){g=A.resolve(g).then(function(){return e.apply(a,c)})}):g=e.apply(a,c);return g}}function b(a){w.currentRunLoop?a():w(a)}function g(a,b,c,e){a[b]=function(){var a=arguments;return e?c.apply(this,a):this.then(function(){return c.apply(this,a)})}}function p(a,c){var e,d;A.lastPromise=null;e=a(c);d=A.lastPromise;if(e&&e instanceof A.Promise||!d)return e;b(function(){d=A.resolve(d).then(function(){return e})});return d}var u=a["default"],
w=m["default"];a=n.create;var s=f["default"],q=l["default"],e=k["default"],r=[].slice,v={},t=[],A={registerHelper:function(a,b){v[a]={method:b,meta:{wait:!1}}},registerAsyncHelper:function(a,b){v[a]={method:b,meta:{wait:!0}}},unregisterHelper:function(a){delete v[a];delete A.Promise.prototype[a]},onInjectHelpers:function(a){t.push(a)},promise:function(a){return new A.Promise(a)},adapter:null,resolve:function(a){return A.promise(function(b){return b(a)})},registerWaiter:function(a,b){1===arguments.length&&
(b=a,a=null);this.waiters||(this.waiters=u.A());this.waiters.push([a,b])},unregisterWaiter:function(a,b){var c;this.waiters&&(1===arguments.length&&(b=a,a=null),c=[a,b],this.waiters=u.A(this.waiters.filter(function(a){return 0!==s(a,c)})))}};d["default"].reopen({testHelpers:{},originalMethods:{},testing:!1,setupForTesting:function(){e();this.testing=!0;this.Router.reopen({location:"none"})},helperContainer:window,injectTestHelpers:function(a){a&&(this.helperContainer=a);this.testHelpers={};for(var b in v)this.originalMethods[b]=
this.helperContainer[b],this.testHelpers[b]=this.helperContainer[b]=c(this,b),g(A.Promise.prototype,b,c(this,b),v[b].meta.wait);a=0;for(b=t.length;a<b;a++)t[a](this)},removeTestHelpers:function(){for(var a in v)this.helperContainer[a]=this.originalMethods[a],delete this.testHelpers[a],delete this.originalMethods[a]}});A.Promise=function(){q.Promise.apply(this,arguments);A.lastPromise=this};A.Promise.prototype=a(q.Promise.prototype);A.Promise.prototype.constructor=A.Promise;var x=q.Promise.prototype.then;
A.Promise.prototype.then=function(a,b){return x.call(this,function(b){return p(a,b)},b)};h["default"]=A});t("ember-views","ember-runtime ember-views/system/jquery ember-views/system/utils ember-views/system/render_buffer ember-views/system/ext ember-views/views/states ember-views/views/view ember-views/views/container_view ember-views/views/collection_view ember-views/views/component ember-views/system/event_dispatcher ember-views/mixins/view_target_action_support exports".split(" "),function(a,m,
n,f,l,k,d,h,c,b,g,p,u){a=a["default"];l=n.setInnerHTML;n=n.isSimpleClick;var t=f["default"];f=k.cloneStates;k=k.states;var s=d.CoreView,q=d.View;d=d.ViewCollection;h=h["default"];c=c["default"];b=b["default"];g=g["default"];p=p["default"];a.$=m["default"];a.ViewTargetActionSupport=p;a.RenderBuffer=t;m=a.ViewUtils={};m.setInnerHTML=l;m.isSimpleClick=n;a.CoreView=s;a.View=q;a.View.states=k;a.View.cloneStates=f;a._ViewCollection=d;a.ContainerView=h;a.CollectionView=c;a.Component=b;a.EventDispatcher=
g;u["default"]=a});t("ember-views/mixins/component_template_deprecation",["ember-metal/core","ember-metal/property_get","ember-metal/mixin","exports"],function(a,m,n,f){var l=a["default"],k=m.get;f["default"]=n.Mixin.create({willMergeMixin:function(a){this._super.apply(this,arguments);var f,c,b=a.layoutName||a.layout||k(this,"layoutName");a.templateName&&!b&&(f="templateName",c="layoutName",a.layoutName=a.templateName,delete a.templateName);a.template&&!b&&(f="template",c="layout",a.layout=a.template,
delete a.template);f&&l.deprecate("Do not specify "+f+" on a Component, use "+c+" instead.",!1)}})});t("ember-views/mixins/view_target_action_support",["ember-metal/mixin","ember-runtime/mixins/target_action_support","ember-metal/computed","exports"],function(a,m,n,f){n=n.computed.alias;f["default"]=a.Mixin.create(m["default"],{target:n("controller"),actionContext:n("context")})});t("ember-views/system/event_dispatcher","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/is_none ember-metal/run_loop ember-metal/utils ember-runtime/system/string ember-runtime/system/object ember-views/system/jquery ember-views/views/view exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g){var p=a["default"],u=m.get,t=n.set,s=f.isNone,q=l["default"],e=k.typeOf,r=d.fmt,v=c["default"],y=b.View,A;g["default"]=h["default"].extend({events:{touchstart:"touchStart",touchmove:"touchMove",touchend:"touchEnd",touchcancel:"touchCancel",keydown:"keyDown",keyup:"keyUp",keypress:"keyPress",mousedown:"mouseDown",mouseup:"mouseUp",contextmenu:"contextMenu",click:"click",dblclick:"doubleClick",mousemove:"mouseMove",focusin:"focusIn",focusout:"focusOut",mouseenter:"mouseEnter",
mouseleave:"mouseLeave",submit:"submit",input:"input",change:"change",dragstart:"dragStart",drag:"drag",dragenter:"dragEnter",dragleave:"dragLeave",dragover:"dragOver",drop:"drop",dragend:"dragEnd"},rootElement:"body",setup:function(a,b){var c,e=u(this,"events");v.extend(e,a||{});s(b)||t(this,"rootElement",b);b=v(u(this,"rootElement"));p.assert(r("You cannot use the same root element (%@) multiple times in an Ember.Application",[b.selector||b[0].tagName]),!b.is(".ember-application"));p.assert("You cannot make a new Ember.Application using a root element that is a descendent of an existing Ember.Application",
!b.closest(".ember-application").length);p.assert("You cannot make a new Ember.Application using a root element that is an ancestor of an existing Ember.Application",!b.find(".ember-application").length);b.addClass("ember-application");p.assert('Unable to add "ember-application" class to rootElement. Make sure you set rootElement to the body or an element in the body.',b.is(".ember-application"));for(c in e)e.hasOwnProperty(c)&&this.setupHandler(b,c,e[c])},setupHandler:function(a,b,c){var e=this;
a.on(b+".ember",".ember-view",function(a,b){var d=y.views[this.id],g=!0,f=null;(f=e._findNearestEventManager(d,c))&&f!==b?g=e._dispatchEvent(f,a,c,d):d?g=e._bubbleEvent(d,a,c):a.stopPropagation();return g});a.on(b+".ember","[data-ember-action]",function(a){A||(A=S("ember-routing/helpers/action").ActionHelper);var b=v(a.currentTarget).attr("data-ember-action");if((b=A.registeredActions[b])&&b.eventName===c)return b.handler(a)})},_findNearestEventManager:function(a,b){for(var c=null;a&&(!(c=u(a,"eventManager"))||
!c[b]);)a=u(a,"parentView");return c},_dispatchEvent:function(a,b,c,d){var g=!0,g=a[c];"function"===e(g)?(g=q(a,g,b,d),b.stopPropagation()):g=this._bubbleEvent(d,b,c);return g},_bubbleEvent:function(a,b,c){return q(a,a.handleEvent,c,b)},destroy:function(){var a=u(this,"rootElement");v(a).off(".ember","**").removeClass("ember-application");return this._super()}})});t("ember-views/system/ext",["ember-metal/run_loop"],function(a){a=a["default"];a._addQueue("render","actions");a._addQueue("afterRender",
"render")});t("ember-views/system/jquery",["ember-metal/core","ember-runtime/system/string","ember-metal/enumerable_utils","exports"],function(a,m,n,f){a=a["default"];m=m.w;n=n["default"].forEach;var l=a.imports&&a.imports.jQuery||this&&this.jQuery;!l&&"function"===typeof ia&&(l=ia("jquery"));a.assert("Ember Views require jQuery between 1.7 and 2.1",l&&(l().jquery.match(/^((1\.(7|8|9|10|11))|(2\.(0|1)))(\.\d+)?(pre|rc\d?)?/)||a.ENV.FORCE_JQUERY));l&&(a=m("dragstart drag dragenter dragleave dragover drop dragend"),
n(a,function(a){l.event.fixHooks[a]={props:["dataTransfer"]}}));f["default"]=l});t("ember-views/system/render_buffer","ember-metal/core ember-metal/property_get ember-metal/property_set ember-views/system/utils ember-views/system/jquery exports".split(" "),function(a,m,n,f,l,k){function d(){this.seen={};this.list=[]}function h(a){return!a||!u.test(a)?a:a.replace(t,"")}function c(a){var b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"};a=a.toString();return!q.test(a)?a:a.replace(s,function(a){return b[a]||
"&amp;"})}function b(a){this.tagNames=[a||null];this.buffer=""}var g=f.setInnerHTML,p=l["default"];d.prototype={add:function(a){a in this.seen||(this.seen[a]=!0,this.list.push(a))},toDOM:function(){return this.list.join(" ")}};var u=/[^a-zA-Z0-9\-]/,t=/[^a-zA-Z0-9\-]/g,s=/&(?!\w+;)|[<>"'`]/g,q=/[&<>"'`]/,e=function(){var a=document.createElement("div"),b=document.createElement("input");b.setAttribute("name","foo");a.appendChild(b);return!!a.innerHTML.match("foo")}();k["default"]=function(a){return new b(a)};
b.prototype={_element:null,_hasElement:!0,elementClasses:null,classes:null,elementId:null,elementAttributes:null,elementProperties:null,elementTag:null,elementStyle:null,parentBuffer:null,push:function(a){this.buffer+=a;return this},addClass:function(a){this.elementClasses=this.elementClasses||new d;this.elementClasses.add(a);this.classes=this.elementClasses.list;return this},setClasses:function(a){this.elementClasses=null;var b=a.length,c;for(c=0;c<b;c++)this.addClass(a[c])},id:function(a){this.elementId=
a;return this},attr:function(a,b){var c=this.elementAttributes=this.elementAttributes||{};if(1===arguments.length)return c[a];c[a]=b;return this},removeAttr:function(a){var b=this.elementAttributes;b&&delete b[a];return this},prop:function(a,b){var c=this.elementProperties=this.elementProperties||{};if(1===arguments.length)return c[a];c[a]=b;return this},removeProp:function(a){var b=this.elementProperties;b&&delete b[a];return this},style:function(a,b){this.elementStyle=this.elementStyle||{};this.elementStyle[a]=
b;return this},begin:function(a){this.tagNames.push(a||null);return this},pushOpeningTag:function(){var a=this.currentTagName();if(a)if(this._hasElement&&!this._element&&0===this.buffer.length)this._element=this.generateElement();else{var b=this.buffer,e=this.elementId,d=this.classes,g=this.elementAttributes,f=this.elementProperties,q=this.elementStyle,k,l,b=b+("<"+h(a));e&&(b+=' id="'+c(e)+'"',this.elementId=null);d&&(b+=' class="'+c(d.join(" "))+'"',this.elementClasses=this.classes=null);if(q){b+=
' style="';for(l in q)q.hasOwnProperty(l)&&(b+=l+":"+c(q[l])+";");b+='"';this.elementStyle=null}if(g){for(k in g)g.hasOwnProperty(k)&&(b+=" "+k+'="'+c(g[k])+'"');this.elementAttributes=null}if(f){for(l in f)if(f.hasOwnProperty(l)&&((a=f[l])||"number"===typeof a))b=!0===a?b+(" "+l+'="'+l+'"'):b+(" "+l+'="'+c(f[l])+'"');this.elementProperties=null}this.buffer=b+">"}},pushClosingTag:function(){var a=this.tagNames.pop();a&&(this.buffer+="</"+h(a)+">")},currentTagName:function(){return this.tagNames[this.tagNames.length-
1]},generateElement:function(){var a=this.tagNames.pop(),b=this.elementId,d=this.classes,g=this.elementAttributes,f=this.elementProperties,q=this.elementStyle,k="",l,m,a=g&&g.name&&!e?"<"+h(a)+' name="'+c(g.name)+'">':a,a=document.createElement(a),n=p(a);b&&(n.attr("id",b),this.elementId=null);d&&(n.attr("class",d.join(" ")),this.elementClasses=this.classes=null);if(q){for(m in q)q.hasOwnProperty(m)&&(k+=m+":"+q[m]+";");n.attr("style",k);this.elementStyle=null}if(g){for(l in g)g.hasOwnProperty(l)&&
n.attr(l,g[l]);this.elementAttributes=null}if(f){for(m in f)f.hasOwnProperty(m)&&n.prop(m,f[m]);this.elementProperties=null}return a},element:function(){var a=this.innerString();a&&(this._element=g(this._element,a));return this._element},string:function(){if(this._hasElement&&this._element){var a=this.element(),b=a.outerHTML;return"undefined"===typeof b?p("<div/>").append(a).html():b}return this.innerString()},innerString:function(){return this.buffer}}});t("ember-views/system/utils",["ember-metal/core",
"exports"],function(a,m){var n=a["default"],f="undefined"!==typeof document&&function(){var a=document.createElement("div");a.innerHTML="<div></div>";a.firstChild.innerHTML="<script>\x3c/script>";return""===a.firstChild.innerHTML}(),l="undefined"!==typeof document&&function(){var a=document.createElement("div");a.innerHTML="Test: <script type='text/x-placeholder'>\x3c/script>Value";return"Test:"===a.childNodes[0].nodeValue&&" Value"===a.childNodes[2].nodeValue}(),k=function(a,b){if(a.getAttribute("id")===
b)return a;var d=a.childNodes.length,f,h;for(f=0;f<d;f++)if(h=a.childNodes[f],h=1===h.nodeType&&k(h,b))return h},d=function(a,b){f&&(b="&shy;"+b);var d=[];l&&(b=b.replace(/(\s+)(<script id='([^']+)')/g,function(a,b,c,f){d.push([f,b]);return c}));a.innerHTML=b;if(0<d.length){var h=d.length,m;for(m=0;m<h;m++){var n=k(a,d[m][0]),s=document.createTextNode(d[m][1]);n.parentNode.insertBefore(s,n)}}if(f){for(h=a.firstChild;1===h.nodeType&&!h.nodeName;)h=h.firstChild;3===h.nodeType&&"\u00ad"===h.nodeValue.charAt(0)&&
(h.nodeValue=h.nodeValue.slice(1))}},h={};m.setInnerHTML=function(a,b){var g=a.tagName,f;void 0!==h[g]?f=h[g]:(f=!0,"select"===g.toLowerCase()&&(f=document.createElement("select"),d(f,'<option value="test">Test</option>'),f=1===f.options.length),h[g]=f);if(f)d(a,b);else{f=a.outerHTML||(new XMLSerializer).serializeToString(a);n.assert("Can't set innerHTML on "+a.tagName+" in this browser",f);f=f.match(RegExp("<"+g+"([^>]*)>","i"))[0];var k="</"+g+">",l=document.createElement("div");d(l,f+b+k);for(a=
l.firstChild;a.tagName!==g;)a=a.nextSibling}return a};m.isSimpleClick=function(a){var b=1<a.which;return!(a.shiftKey||a.metaKey||a.altKey||a.ctrlKey)&&!b}});t("ember-views/views/collection_view","ember-metal/core ember-metal/platform ember-metal/binding ember-metal/merge ember-metal/property_get ember-metal/property_set ember-runtime/system/string ember-views/views/container_view ember-views/views/view ember-metal/mixin ember-runtime/mixins/array exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g,
p){var u=a["default"],t=n.isGlobalPath,s=l.get,q=k.set,e=d.fmt,r=c.CoreView,v=c.View;a=b.observer;b=b.beforeObserver;var y=g["default"],A=h["default"].extend({content:null,emptyViewClass:v,emptyView:null,itemViewClass:v,init:function(){var a=this._super();this._contentDidChange();return a},_contentWillChange:b("content",function(){var a=this.get("content");a&&a.removeArrayObserver(this);var b=a?s(a,"length"):0;this.arrayWillChange(a,0,b)}),_contentDidChange:a("content",function(){var a=s(this,"content");
a&&(this._assertArrayLike(a),a.addArrayObserver(this));var b=a?s(a,"length"):0;this.arrayDidChange(a,0,null,b)}),_assertArrayLike:function(a){u.assert(e("an Ember.CollectionView's content must implement Ember.Array. You passed %@",[a]),y.detect(a))},destroy:function(){if(this._super()){var a=s(this,"content");a&&a.removeArrayObserver(this);this._createdEmptyView&&this._createdEmptyView.destroy();return this}},arrayWillChange:function(a,b,c){(a=s(this,"emptyView"))&&a instanceof v&&a.removeFromParent();
a=this._childViews;var e;c===this._childViews.length&&(this.currentState.empty(this),this.invokeRecursively(function(a){a.removedFromDOM=!0},!1));for(e=b+c-1;e>=b;e--)c=a[e],c.destroy()},arrayDidChange:function(a,b,c,d){c=[];var g,f,h;if(a&&s(a,"length")){h=s(this,"itemViewClass");"string"===typeof h&&t(h)&&(h=s(h)||h);u.assert(e("itemViewClass must be a subclass of Ember.View, not %@",[h]),"string"===typeof h||v.detect(h));for(f=b;f<b+d;f++)g=a.objectAt(f),g=this.createChildView(h,{content:g,contentIndex:f}),
c.push(g)}else{a=s(this,"emptyView");if(!a)return;"string"===typeof a&&t(a)&&(a=s(a)||a);a=this.createChildView(a);c.push(a);q(this,"emptyView",a);r.detect(a)&&(this._createdEmptyView=a)}this.replace(b,0,c)},createChildView:function(a,b){a=this._super(a,b);var c=s(a,"tagName");if(null===c||void 0===c)c=A.CONTAINER_MAP[s(this,"tagName")],q(a,"tagName",c);return a}});A.CONTAINER_MAP={ul:"li",ol:"li",table:"tr",thead:"tr",tbody:"tr",tfoot:"tr",tr:"td",select:"option"};p["default"]=A});t("ember-views/views/component",
"ember-metal/core ember-views/mixins/component_template_deprecation ember-runtime/mixins/target_action_support ember-views/views/view ember-metal/property_get ember-metal/property_set ember-metal/is_none ember-metal/computed exports".split(" "),function(a,m,n,f,l,k,d,h,c){var b=a["default"],g=f.View,p=l.get,u=k.set,t=d.isNone;a=h.computed;var s=Array.prototype.slice;m=g.extend(n["default"],m["default"],{instrumentName:"component",instrumentDisplay:a(function(){if(this._debugContainerKey)return"{{"+
this._debugContainerKey.split(":")[1]+"}}"}),init:function(){this._super();u(this,"origContext",p(this,"context"));u(this,"context",this);u(this,"controller",this)},defaultLayout:function(a,c){b.Handlebars.helpers.yield.call(a,c)},template:a(function(a,c){if(void 0!==c)return c;var d=p(this,"templateName"),g=this.templateForName(d,"template");b.assert("You specified the templateName "+d+" for "+this+", but it did not exist.",!d||g);return g||p(this,"defaultTemplate")}).property("templateName"),templateName:null,
cloneKeywords:function(){return{view:this,controller:this}},_yield:function(a,c){var d=c.data.view,f=this._parentView,h=p(this,"template");h&&(b.assert("A Component must have a parent view in order to yield.",f),d.appendChild(g,{isVirtual:!0,tagName:"",_contextView:f,template:h,context:c.data.insideGroup?p(this,"origContext"):p(f,"context"),controller:p(f,"controller"),templateData:{keywords:f.cloneKeywords(),insideGroup:c.data.insideGroup}}))},targetObject:a(function(a){return(a=p(this,"_parentView"))?
p(a,"controller"):null}).property("_parentView"),sendAction:function(a){var c,d=s.call(arguments,1);void 0===a?(c=p(this,"action"),b.assert("The default action was triggered on the component "+this.toString()+", but the action name ("+c+") was not a string.",t(c)||"string"===typeof c)):(c=p(this,a),b.assert("The "+a+" action was triggered on the component "+this.toString()+", but the action name ("+c+") was not a string.",t(c)||"string"===typeof c));void 0!==c&&this.triggerAction({action:c,actionContext:d})}});
c["default"]=m});t("ember-views/views/container_view","ember-metal/core ember-metal/merge ember-runtime/mixins/mutable_array ember-metal/property_get ember-metal/property_set ember-views/views/view ember-views/views/states ember-metal/error ember-metal/enumerable_utils ember-metal/computed ember-metal/run_loop ember-metal/properties ember-views/system/render_buffer ember-metal/mixin ember-runtime/system/native_array exports".split(" "),function(a,m,n,f,l,k,d,h,c,b,g,p,u,t,s,q){function e(a,b,c,e){b.triggerRecursively("willInsertElement");
c?c.domManager.after(c,e.string()):a.domManager.prepend(a,e.string());b.forEach(function(a){a.transitionTo("inDOM");a.propertyDidChange("element");a.triggerRecursively("didInsertElement")})}var r=a["default"];a=m["default"];n=n["default"];var v=f.get,y=l.set,A=k.View,x=k.ViewCollection;f=d.cloneStates;var G=h["default"],B=c["default"].forEach;h=b.computed;var C=g["default"],E=p.defineProperty,D=u["default"];g=t.observer;t=t.beforeObserver;var L=s.A;d=f(d.states);s=A.extend(n,{_states:d,init:function(){this._super();
var a=v(this,"childViews");E(this,"childViews",A.childViewsProperty);var b=this._childViews;B(a,function(a,c){var e;"string"===typeof a?(e=v(this,a),e=this.createChildView(e),y(this,a,e)):e=this.createChildView(a);b[c]=e},this);if(a=v(this,"currentView"))b.length||(b=this._childViews=this._childViews.slice()),b.push(this.createChildView(a))},replace:function(a,b,c){var e=c?v(c,"length"):0,d=this;r.assert("You can't add a child to a container - the child is already a child of another view",L(c).every(function(a){return!v(a,
"_parentView")||v(a,"_parentView")===d}));this.arrayContentWillChange(a,b,e);this.childViewsWillChange(this._childViews,a,b);if(0===e)this._childViews.splice(a,b);else{var g=[a,b].concat(c);c.length&&!this._childViews.length&&(this._childViews=this._childViews.slice());this._childViews.splice.apply(this._childViews,g)}this.arrayContentDidChange(a,b,e);this.childViewsDidChange(this._childViews,a,b,e);return this},objectAt:function(a){return this._childViews[a]},length:h(function(){return this._childViews.length}).volatile(),
render:function(a){this.forEachChildView(function(b){b.renderToBuffer(a)})},instrumentName:"container",childViewsWillChange:function(a,b,c){this.propertyWillChange("childViews");if(0<c){var e=a.slice(b,b+c);this.currentState.childViewsWillChange(this,a,b,c);this.initializeViews(e,null,null)}},removeChild:function(a){this.removeObject(a);return this},childViewsDidChange:function(a,b,c,e){0<e&&(c=a.slice(b,b+e),this.initializeViews(c,this,v(this,"templateData")),this.currentState.childViewsDidChange(this,
a,b,e));this.propertyDidChange("childViews")},initializeViews:function(a,b,c){B(a,function(a){y(a,"_parentView",b);!a.container&&b&&y(a,"container",b.container);v(a,"templateData")||y(a,"templateData",c)})},currentView:null,_currentViewWillChange:t("currentView",function(){var a=v(this,"currentView");a&&a.destroy()}),_currentViewDidChange:g("currentView",function(){var a=v(this,"currentView");a&&(r.assert("You tried to set a current view that already has a parent. Make sure you don't have multiple outlets in the same view.",
!v(a,"_parentView")),this.pushObject(a))}),_ensureChildrenAreInDOM:function(){this.currentState.ensureChildrenAreInDOM(this)}});a(d._default,{childViewsWillChange:r.K,childViewsDidChange:r.K,ensureChildrenAreInDOM:r.K});a(d.inBuffer,{childViewsDidChange:function(a,b,c,e){throw new G("You cannot modify child views while in the inBuffer state");}});a(d.hasElement,{childViewsWillChange:function(a,b,c,e){for(a=c;a<c+e;a++)b[a].remove()},childViewsDidChange:function(a,b,c,e){C.scheduleOnce("render",a,
"_ensureChildrenAreInDOM")},ensureChildrenAreInDOM:function(a){var b=a._childViews,c,d,g,f,h,k=new x;c=0;for(d=b.length;c<d;c++)g=b[c],h||(h=D(),h._hasElement=!1),g.renderToBufferIfNeeded(h)?k.push(g):k.length?(e(a,k,f,h),h=null,f=g,k.clear()):f=g;k.length&&e(a,k,f,h)}});q["default"]=s});t("ember-views/views/states","ember-metal/platform ember-metal/merge ember-views/views/states/default ember-views/views/states/pre_render ember-views/views/states/in_buffer ember-views/views/states/has_element ember-views/views/states/in_dom ember-views/views/states/destroying exports".split(" "),
function(a,m,n,f,l,k,d,h,c){var b=a.create,g=m["default"];a=n["default"];f=f["default"];l=l["default"];k=k["default"];d=d["default"];h=h["default"];c.cloneStates=function(a){var c={_default:{}};c.preRender=b(c._default);c.destroying=b(c._default);c.inBuffer=b(c._default);c.hasElement=b(c._default);c.inDOM=b(c.hasElement);for(var d in a)a.hasOwnProperty(d)&&g(c[d],a[d]);return c};c.states={_default:a,preRender:f,inDOM:d,inBuffer:l,hasElement:k,destroying:h}});t("ember-views/views/states/default","ember-metal/core ember-metal/property_get ember-metal/property_set ember-metal/run_loop ember-metal/error exports".split(" "),
function(a,m,n,f,l,k){a=a["default"];var d=n.set,h=f["default"],c=l["default"];k["default"]={appendChild:function(){throw new c("You can't use appendChild outside of the rendering process");},$:function(){},getElement:function(){return null},handleEvent:function(){return!0},destroyElement:function(a){d(a,"element",null);a._scheduledInsert&&(h.cancel(a._scheduledInsert),a._scheduledInsert=null);return a},renderToBufferIfNeeded:function(){return!1},rerender:a.K,invokeObserver:a.K}});t("ember-views/views/states/destroying",
"ember-metal/merge ember-metal/platform ember-runtime/system/string ember-views/views/states/default ember-metal/error exports".split(" "),function(a,m,n,f,l,k){a=a["default"];m=m.create;var d=n.fmt,h=l["default"];n=m(f["default"]);a(n,{appendChild:function(){throw new h(d("You can't call %@ on a view being destroyed",["appendChild"]));},rerender:function(){throw new h(d("You can't call %@ on a view being destroyed",["rerender"]));},destroyElement:function(){throw new h(d("You can't call %@ on a view being destroyed",
["destroyElement"]));},empty:function(){throw new h(d("You can't call %@ on a view being destroyed",["empty"]));},setElement:function(){throw new h(d("You can't call %@ on a view being destroyed",["set('element', ...)"]));},renderToBufferIfNeeded:function(){return!1},insertElement:D.K});k["default"]=n});t("ember-views/views/states/has_element","ember-views/views/states/default ember-metal/run_loop ember-metal/merge ember-metal/platform ember-views/system/jquery ember-metal/error ember-metal/property_get ember-metal/property_set exports".split(" "),
function(a,m,n,f,l,k,d,h,c){var b=m["default"];m=n["default"];f=f.create;var g=l["default"],p=k["default"],u=d.get,t=h.set;a=f(a["default"]);m(a,{$:function(a,b){var c=u(a,"element");return b?g(b,c):g(c)},getElement:function(a){var b=u(a,"parentView");b&&(b=u(b,"element"));return b?a.findElementInParentElement(b):g("#"+u(a,"elementId"))[0]},setElement:function(a,b){if(null===b)a.transitionTo("preRender");else throw new p("You cannot set an element to a non-null value when the element is already in the DOM.");
return b},rerender:function(a){a.triggerRecursively("willClearRender");a.clearRenderedChildren();a.domManager.replace(a);return a},destroyElement:function(a){a._notifyWillDestroyElement();a.domManager.remove(a);t(a,"element",null);a._scheduledInsert&&(b.cancel(a._scheduledInsert),a._scheduledInsert=null);return a},empty:function(a){var b=a._childViews,c,d;if(b){c=b.length;for(d=0;d<c;d++)b[d]._notifyWillDestroyElement()}a.domManager.empty(a)},handleEvent:function(a,b,c){return a.has(b)?a.trigger(b,
c):!0},invokeObserver:function(a,b){b.call(a)}});c["default"]=a});t("ember-views/views/states/in_buffer","ember-views/views/states/default ember-metal/error ember-metal/core ember-metal/platform ember-metal/merge exports".split(" "),function(a,m,n,f,l,k){var d=m["default"],h=n["default"];m=f.create;l=l["default"];a=m(a["default"]);l(a,{$:function(a,b){a.rerender();return h.$()},rerender:function(a){throw new d("Something you did caused a view to re-render after it rendered but before it was inserted into the DOM.");
},appendChild:function(a,b,d){var f=a.buffer,h=a._childViews;b=a.createChildView(b,d);h.length||(h=a._childViews=h.slice());h.push(b);b.renderToBuffer(f);a.propertyDidChange("childViews");return b},destroyElement:function(a){a.clearBuffer();a._notifyWillDestroyElement().transitionTo("preRender",!1);return a},empty:function(){h.assert("Emptying a view in the inBuffer state is not allowed and should not happen under normal circumstances. Most likely there is a bug in your application. This may be due to excessive property change notifications.")},
renderToBufferIfNeeded:function(a,b){return!1},insertElement:function(){throw new d("You can't insert an element that has already been rendered");},setElement:function(a,b){null===b?a.transitionTo("preRender"):(a.clearBuffer(),a.transitionTo("hasElement"));return b},invokeObserver:function(a,b){b.call(a)}});k["default"]=a});t("ember-views/views/states/in_dom","ember-metal/core ember-metal/platform ember-metal/merge ember-metal/error ember-views/views/states/has_element exports".split(" "),function(a,
m,n,f,l,k){var d=a["default"];a=m.create;n=n["default"];var h=f["default"];f=a(l["default"]);var c;n(f,{enter:function(a){c||(c=S("ember-views/views/view").View);a.isVirtual||(d.assert("Attempted to register a view with an id already in use: "+a.elementId,!c.views[a.elementId]),c.views[a.elementId]=a);a.addBeforeObserver("elementId",function(){throw new h("Changing a view's elementId after creation is not allowed");})},exit:function(a){c||(c=S("ember-views/views/view").View);this.isVirtual||delete c.views[a.elementId]},
insertElement:function(a,c){throw new h("You can't insert an element into the DOM that has already been inserted");}});k["default"]=f});t("ember-views/views/states/pre_render",["ember-views/views/states/default","ember-metal/platform","ember-metal/merge","exports"],function(a,m,n,f){m=m.create;n=n["default"];a=m(a["default"]);n(a,{insertElement:function(a,f){a.createElement();var d=a.viewHierarchyCollection();d.trigger("willInsertElement");f.call(a);var h=a.get("element");document.body.contains(h)&&
(d.transitionTo("inDOM",!1),d.trigger("didInsertElement"))},renderToBufferIfNeeded:function(a,f){a.renderToBuffer(f);return!0},empty:D.K,setElement:function(a,f){null!==f&&a.transitionTo("hasElement");return f}});f["default"]=a});t("ember-views/views/view","ember-metal/core ember-metal/error ember-runtime/system/object ember-runtime/mixins/evented ember-runtime/mixins/action_handler ember-views/system/render_buffer ember-metal/property_get ember-metal/property_set ember-metal/set_properties ember-metal/run_loop ember-metal/observer ember-metal/properties ember-metal/utils ember-metal/computed ember-metal/mixin ember-metal/is_none container/container ember-runtime/system/native_array ember-metal/instrumentation ember-runtime/system/string ember-metal/enumerable_utils ember-runtime/copy ember-metal/binding ember-metal/property_events ember-views/views/states ember-views/system/jquery ember-views/system/ext exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,u,t,s,q,e,r,v,y,A,x,G,B,C,E,D,L){function H(a){a.buffer=null}function K(a){V(a).cache.element=void 0}function Q(){R.once(ba,"notifyMutationListeners")}var I=a["default"],N=m["default"];a=n["default"];f=f["default"];l=l["default"];var z=k["default"],F=d.get,P=h.set,O=c["default"],R=b["default"],X=g.addObserver,U=g.removeObserver,Y=p.defineProperty,da=p.deprecateProperty,ea=u.guidFor,V=u.meta;k=t.computed;d=s.observer;var J=u.typeOf,Z=u.isArray,na=q.isNone,W=s.Mixin,
T=e["default"],ca=r.A,$=v.instrument,fa=y.dasherize;u=A["default"];var aa=u.forEach,ia=u.addObject,ja=u.removeObject;s=s.beforeObserver;var ka=x["default"],ma=G.isGlobalPath,sa=B.propertyWillChange,ta=B.propertyDidChange;x=C.cloneStates;C=C.states;var ha=E["default"],oa;E=k(function(){var a=this._childViews,b=ca(),c=this;aa(a,function(a){var c;a.isVirtual?(c=F(a,"childViews"))&&b.pushObjects(c):b.push(a)});b.replace=function(a,b,e){oa||(oa=S("ember-views/views/container_view")["default"]);if(c instanceof
oa)return I.deprecate("Manipulating an Ember.ContainerView through its childViews property is deprecated. Please use the ContainerView instance itself as an Ember.MutableArray."),c.replace(a,b,e);throw new N("childViews is immutable");};return b});I.warn("The VIEW_PRESERVES_CONTEXT flag has been removed and the functionality can no longer be disabled.",!1!==I.ENV.VIEW_PRESERVES_CONTEXT);I.TEMPLATES={};var ua=a.extend(f,l,{isView:!0,_states:x(C),init:function(){this._super();this.transitionTo("preRender");
this._isVisible=F(this,"isVisible");da(this,"states","_states");da(this,"state","_state")},parentView:k("_parentView",function(){var a=this._parentView;return a&&a.isVirtual?F(a,"parentView"):a}),_state:null,_parentView:null,concreteView:k("parentView",function(){return this.isVirtual?F(this,"parentView.concreteView"):this}),instrumentName:"core_view",instrumentDetails:function(a){a.object=this.toString();a.containerKey=this._debugContainerKey;a.view=this},renderToBuffer:function(a,b){var c="render."+
this.instrumentName,e={};this.instrumentDetails(e);return $(c,e,function(){return this._renderToBuffer(a,b)},this)},_renderToBuffer:function(a,b){var c=this.tagName;if(null===c||void 0===c)c="div";c=this.buffer=a&&a.begin(c)||z(c);this.transitionTo("inBuffer",!1);this.beforeRender(c);this.render(c);this.afterRender(c);return c},trigger:function(){this._super.apply(this,arguments);var a=this[arguments[0]];if(a){for(var b=arguments.length,c=Array(b-1),e=1;e<b;e++)c[e-1]=arguments[e];return a.apply(this,
c)}},deprecatedSendHandles:function(a){return!!this[a]},deprecatedSend:function(a){var b=[].slice.call(arguments,1);I.assert(""+this+" has the action "+a+" but it is not a function","function"===typeof this[a]);I.deprecate("Action handlers implemented directly on views are deprecated in favor of action handlers on an `actions` object ( action: `"+a+"` on "+this+")",!1);this[a].apply(this,b)},has:function(a){return"function"===J(this[a])||this._super(a)},destroy:function(){var a=this._parentView;if(this._super())return this.removedFromDOM||
this.destroyElement(),a&&a.removeChild(this),this.transitionTo("destroying",!1),this},clearRenderedChildren:I.K,triggerRecursively:I.K,invokeRecursively:I.K,transitionTo:I.K,destroyElement:I.K}),pa=function(a){this.length=(this.views=a||[]).length};pa.prototype={length:0,trigger:function(a){for(var b=this.views,c,e=0,d=b.length;e<d;e++)c=b[e],c.trigger&&c.trigger(a)},triggerRecursively:function(a){for(var b=this.views,c=0,e=b.length;c<e;c++)b[c].triggerRecursively(a)},invokeRecursively:function(a){for(var b=
this.views,c,e=0,d=b.length;e<d;e++)c=b[e],a(c)},transitionTo:function(a,b){for(var c=this.views,e=0,d=c.length;e<d;e++)c[e].transitionTo(a,b)},push:function(){this.length+=arguments.length;var a=this.views;return a.push.apply(a,arguments)},objectAt:function(a){return this.views[a]},forEach:function(a){return aa(this.views,a)},clear:function(){this.length=0;this.views.length=0}};C=[];var ba=ua.extend({concatenatedProperties:["classNames","classNameBindings","attributeBindings"],isView:!0,templateName:null,
layoutName:null,instrumentDisplay:k(function(){if(this.helperName)return"{{"+this.helperName+"}}"}),template:k("templateName",function(a,b){if(void 0!==b)return b;var c=F(this,"templateName"),e=this.templateForName(c,"template");I.assert("You specified the templateName "+c+" for "+this+", but it did not exist.",!c||e);return e||F(this,"defaultTemplate")}),controller:k("_parentView",function(a){return(a=F(this,"_parentView"))?F(a,"controller"):null}),layout:k(function(a){a=F(this,"layoutName");var b=
this.templateForName(a,"layout");I.assert("You specified the layoutName "+a+" for "+this+", but it did not exist.",!a||b);return b||F(this,"defaultLayout")}).property("layoutName"),_yield:function(a,b){var c=F(this,"template");c&&c(a,b)},templateForName:function(a,b){if(a){I.assert("templateNames are not allowed to contain periods: "+a,-1===a.indexOf("."));var c=this.container||T&&T.defaultContainer;return c&&c.lookup("template:"+a)}},context:k(function(a,b){return 2===arguments.length?(P(this,"_context",
b),b):F(this,"_context")}).volatile(),_context:k(function(a){return(a=F(this,"controller"))?a:(a=this._parentView)?F(a,"_context"):null}),_contextDidChange:d("context",function(){this.rerender()}),isVisible:!0,childViews:E,_childViews:C,_childViewsWillChange:s("childViews",function(){if(this.isVirtual){var a=F(this,"parentView");a&&sa(a,"childViews")}}),_childViewsDidChange:d("childViews",function(){if(this.isVirtual){var a=F(this,"parentView");a&&ta(a,"childViews")}}),nearestInstanceOf:function(a){I.deprecate("nearestInstanceOf is deprecated and will be removed from future releases. Use nearestOfType.");
for(var b=F(this,"parentView");b;){if(b instanceof a)return b;b=F(b,"parentView")}},nearestOfType:function(a){for(var b=F(this,"parentView"),c=a instanceof W?function(b){return a.detect(b)}:function(b){return a.detect(b.constructor)};b;){if(c(b))return b;b=F(b,"parentView")}},nearestWithProperty:function(a){for(var b=F(this,"parentView");b;){if(a in b)return b;b=F(b,"parentView")}},nearestChildOf:function(a){for(var b=F(this,"parentView");b;){if(F(b,"parentView")instanceof a)return b;b=F(b,"parentView")}},
_parentViewDidChange:d("_parentView",function(){this.isDestroying||(this.trigger("parentViewDidChange"),F(this,"parentView.controller")&&!F(this,"controller")&&this.notifyPropertyChange("controller"))}),_controllerDidChange:d("controller",function(){this.isDestroying||(this.rerender(),this.forEachChildView(function(a){a.propertyDidChange("controller")}))}),cloneKeywords:function(){var a=F(this,"templateData"),a=a?ka(a.keywords):{};P(a,"view",this.isVirtual?a.view:this);P(a,"_view",this);P(a,"controller",
F(this,"controller"));return a},render:function(a){var b=F(this,"layout")||F(this,"template");if(b){var c=F(this,"context"),e=this.cloneKeywords(),e={view:this,buffer:a,isRenderData:!0,keywords:e,insideGroup:F(this,"templateData.insideGroup")};I.assert('template must be a function. Did you mean to call Ember.Handlebars.compile("...") or specify templateName instead?',"function"===typeof b);b=b(c,{data:e});void 0!==b&&a.push(b)}},rerender:function(){return this.currentState.rerender(this)},clearRenderedChildren:function(){for(var a=
this.lengthBeforeRender,b=this._childViews,c=this.lengthAfterRender-1;c>=a;c--)b[c]&&b[c].destroy()},_applyClassNameBindings:function(a){var b=this.classNames,c,e,d;aa(a,function(a){I.assert("classNameBindings must not have spaces in them. Multiple class name bindings can be provided as elements of an array, e.g. ['foo', ':bar']",-1===a.indexOf(" "));var g,f=ba._parsePropertyPath(a);if(d=this._classStringForProperty(a))ia(b,d),g=d;this.registerObserver(this,f.path,function(){e=this._classStringForProperty(a);
c=this.$();g&&(c.removeClass(g),b.removeObject(g));e?(c.addClass(e),g=e):g=null});this.one("willClearRender",function(){g&&(b.removeObject(g),g=null)})},this)},_unspecifiedAttributeBindings:null,_applyAttributeBindings:function(a,b){var c,e=this._unspecifiedAttributeBindings=this._unspecifiedAttributeBindings||{};aa(b,function(b){var d=b.split(":");b=d[0];d=d[1]||b;b in this?(this._setupAttributeBindingObservation(b,d),c=F(this,b),ba.applyAttributeBindings(a,d,c)):e[b]=d},this);this.setUnknownProperty=
this._setUnknownProperty},_setupAttributeBindingObservation:function(a,b){var c,e;this.registerObserver(this,a,function(){e=this.$();c=F(this,a);ba.applyAttributeBindings(e,b,c)})},setUnknownProperty:null,_setUnknownProperty:function(a,b){var c=this._unspecifiedAttributeBindings&&this._unspecifiedAttributeBindings[a];c&&this._setupAttributeBindingObservation(a,c);Y(this,a);return P(this,a,b)},_classStringForProperty:function(a){a=ba._parsePropertyPath(a);var b=a.path,c=F(this,b);void 0===c&&ma(b)&&
(c=F(I.lookup,b));return ba._classStringForValue(b,c,a.className,a.falsyClassName)},element:k("_parentView",function(a,b){return void 0!==b?this.currentState.setElement(this,b):this.currentState.getElement(this)}),$:function(a){return this.currentState.$(this,a)},mutateChildViews:function(a){for(var b=this._childViews,c=b.length,e;0<=--c;)e=b[c],a(this,e,c);return this},forEachChildView:function(a){var b=this._childViews;if(!b)return this;var c=b.length,e,d;for(d=0;d<c;d++)e=b[d],a(e);return this},
appendTo:function(a){this._insertElementLater(function(){I.assert("You tried to append to ("+a+") but that isn't in the DOM",0<ha(a).length);I.assert("You cannot append to an existing Ember.View. Consider using Ember.ContainerView instead.",!ha(a).is(".ember-view")&&!ha(a).parents().is(".ember-view"));this.$().appendTo(a)});return this},replaceIn:function(a){I.assert("You tried to replace in ("+a+") but that isn't in the DOM",0<ha(a).length);I.assert("You cannot replace an existing Ember.View. Consider using Ember.ContainerView instead.",
!ha(a).is(".ember-view")&&!ha(a).parents().is(".ember-view"));this._insertElementLater(function(){ha(a).empty();this.$().appendTo(a)});return this},_insertElementLater:function(a){this._scheduledInsert=R.scheduleOnce("render",this,"_insertElement",a)},_insertElement:function(a){this._scheduledInsert=null;this.currentState.insertElement(this,a)},append:function(){return this.appendTo(document.body)},remove:function(){this.removedFromDOM||this.destroyElement();this.invokeRecursively(function(a){a.clearRenderedChildren&&
a.clearRenderedChildren()})},elementId:null,findElementInParentElement:function(a){var b="#"+this.elementId;return ha(b)[0]||ha(b,a)[0]},createElement:function(){if(F(this,"element"))return this;var a=this.renderToBuffer();P(this,"element",a.element());return this},willInsertElement:I.K,didInsertElement:I.K,willClearRender:I.K,invokeRecursively:function(a,b){for(var c=!1===b?this._childViews:[this],e,d,g;c.length;){e=c.slice();for(var c=[],f=0,h=e.length;f<h;f++)d=e[f],g=d._childViews?d._childViews.slice(0):
null,a(d),g&&c.push.apply(c,g)}},triggerRecursively:function(a){for(var b=[this],c,e,d;b.length;){c=b.slice();for(var b=[],g=0,f=c.length;g<f;g++)e=c[g],d=e._childViews?e._childViews.slice(0):null,e.trigger&&e.trigger(a),d&&b.push.apply(b,d)}},viewHierarchyCollection:function(){for(var a,b=new pa([this]),c=0;c<b.length;c++)a=b.objectAt(c),a._childViews&&b.push.apply(b,a._childViews);return b},destroyElement:function(){return this.currentState.destroyElement(this)},willDestroyElement:I.K,_notifyWillDestroyElement:function(){var a=
this.viewHierarchyCollection();a.trigger("willClearRender");a.trigger("willDestroyElement");return a},_elementDidChange:d("element",function(){this.forEachChildView(K)}),parentViewDidChange:I.K,instrumentName:"view",instrumentDetails:function(a){a.template=F(this,"templateName");this._super(a)},_renderToBuffer:function(a,b){this.lengthBeforeRender=this._childViews.length;var c=this._super(a,b);this.lengthAfterRender=this._childViews.length;return c},renderToBufferIfNeeded:function(a){return this.currentState.renderToBufferIfNeeded(this,
a)},beforeRender:function(a){this.applyAttributesToBuffer(a);a.pushOpeningTag()},afterRender:function(a){a.pushClosingTag()},applyAttributesToBuffer:function(a){var b=F(this,"classNameBindings");b.length&&this._applyClassNameBindings(b);b=F(this,"attributeBindings");b.length&&this._applyAttributeBindings(a,b);a.setClasses(this.classNames);a.id(this.elementId);(b=F(this,"ariaRole"))&&a.attr("role",b);!1===F(this,"isVisible")&&a.style("display","none")},tagName:null,ariaRole:null,classNames:["ember-view"],
classNameBindings:C,attributeBindings:C,init:function(){this.elementId=this.elementId||ea(this);this._super();this._childViews=this._childViews.slice();I.assert("Only arrays are allowed for 'classNameBindings'","array"===J(this.classNameBindings));this.classNameBindings=ca(this.classNameBindings.slice());I.assert("Only arrays are allowed for 'classNames'","array"===J(this.classNames));this.classNames=ca(this.classNames.slice())},appendChild:function(a,b){return this.currentState.appendChild(this,
a,b)},removeChild:function(a){if(!this.isDestroying)return P(a,"_parentView",null),ja(this._childViews,a),this.propertyDidChange("childViews"),this},removeAllChildren:function(){return this.mutateChildViews(function(a,b){a.removeChild(b)})},destroyAllChildren:function(){return this.mutateChildViews(function(a,b){b.destroy()})},removeFromParent:function(){var a=this._parentView;this.remove();a&&a.removeChild(this);return this},destroy:function(){var a=this._childViews,b=F(this,"parentView"),c=this.viewName,
e;if(this._super()){e=a.length;for(e-=1;0<=e;e--)a[e].removedFromDOM=!0;c&&b&&b.set(c,null);e=a.length;for(e-=1;0<=e;e--)a[e].destroy();return this}},createChildView:function(a,b){if(!a)throw new TypeError("createChildViews first argument must exist");if(a.isView&&a._parentView===this&&a.container===this.container)return a;b=b||{};b._parentView=this;if(ua.detect(a))b.templateData=b.templateData||F(this,"templateData"),b.container=this.container,a=a.create(b),a.viewName&&P(F(this,"concreteView"),a.viewName,
a);else if("string"===typeof a){var c="view:"+a,e=this.container.lookupFactory(c);I.assert("Could not find view: '"+c+"'",!!e);b.templateData=F(this,"templateData");a=e.create(b)}else I.assert("You must pass instance or subclass of View",a.isView),b.container=this.container,F(a,"templateData")||(b.templateData=F(this,"templateData")),O(a,b);return a},becameVisible:I.K,becameHidden:I.K,_isVisibleDidChange:d("isVisible",function(){this._isVisible!==F(this,"isVisible")&&R.scheduleOnce("render",this,
this._toggleVisibility)}),_toggleVisibility:function(){var a=this.$();if(a){var b=F(this,"isVisible");this._isVisible!==b&&(a.toggle(b),this._isVisible=b,this._isAncestorHidden()||(b?this._notifyBecameVisible():this._notifyBecameHidden()))}},_notifyBecameVisible:function(){this.trigger("becameVisible");this.forEachChildView(function(a){var b=F(a,"isVisible");(b||null===b)&&a._notifyBecameVisible()})},_notifyBecameHidden:function(){this.trigger("becameHidden");this.forEachChildView(function(a){var b=
F(a,"isVisible");(b||null===b)&&a._notifyBecameHidden()})},_isAncestorHidden:function(){for(var a=F(this,"parentView");a;){if(!1===F(a,"isVisible"))return!0;a=F(a,"parentView")}return!1},clearBuffer:function(){this.invokeRecursively(H)},transitionTo:function(a,b){var c=this.currentState,e=this.currentState=this._states[a];this._state=a;c&&c.exit&&c.exit(this);e.enter&&e.enter(this);"inDOM"===a&&(V(this).cache.element=void 0);!1!==b&&this.forEachChildView(function(b){b.transitionTo(a)})},handleEvent:function(a,
b){return this.currentState.handleEvent(this,a,b)},registerObserver:function(a,b,c,e){!e&&"function"===typeof c&&(e=c,c=null);if(a&&"object"===typeof a){var d=this,g=function(){d.currentState.invokeObserver(this,e)},f=function(){R.scheduleOnce("render",this,g)};X(a,b,c,f);this.one("willClearRender",function(){U(a,b,c,f)})}}});ba.reopen({domManager:{prepend:function(a,b){a.$().prepend(b);Q()},after:function(a,b){a.$().after(b);Q()},html:function(a,b){a.$().html(b);Q()},replace:function(a){var b=F(a,
"element");P(a,"element",null);a._insertElementLater(function(){ha(b).replaceWith(F(a,"element"));Q()})},remove:function(a){a.$().remove();Q()},empty:function(a){a.$().empty();Q()}}});ba.reopenClass({_parsePropertyPath:function(a){a=a.split(":");var b=a[0],c="",e,d;1<a.length&&(e=a[1],3===a.length&&(d=a[2]),c=":"+e,d&&(c+=":"+d));return{path:b,classNames:c,className:""===e?void 0:e,falsyClassName:d}},_classStringForValue:function(a,b,c,e){Z(b)&&(b=0!==F(b,"length"));return c||e?c&&b?c:e&&!b?e:null:
!0===b?(a=a.split("."),fa(a[a.length-1])):!1!==b&&null!=b?b:null}});var qa=a.extend(f).create();ba.addMutationListener=function(a){qa.on("change",a)};ba.removeMutationListener=function(a){qa.off("change",a)};ba.notifyMutationListeners=function(){qa.trigger("change")};ba.views={};ba.childViewsProperty=E;ba.applyAttributeBindings=function(a,b,c){var e=J(c);"value"!==b&&("string"===e||"number"===e&&!isNaN(c))?c!==a.attr(b)&&a.attr(b,c):"value"===b||"boolean"===e?na(c)||!1===c?(a.removeAttr(b),a.prop(b,
"")):c!==a.prop(b)&&a.prop(b,c):c||a.removeAttr(b)};L.CoreView=ua;L.View=ba;L.ViewCollection=pa});t("ember","ember-metal ember-runtime ember-handlebars ember-views ember-routing ember-application ember-extension-support".split(" "),function(a,m,n,f,l,k,d){function h(a){return function(){throw new D.Error(a);}}function c(a){return{extend:h(a+" has been moved into a plugin: https://github.com/emberjs/ember-states"),create:h(a+" has been moved into a plugin: https://github.com/emberjs/ember-states")}}
D.__loader.registry["ember-testing"]&&S("ember-testing");D.StateManager=c("Ember.StateManager");D.State=c("Ember.State")});t("metamorph",[],function(){var a=function(){},m=0,n=!("undefined"!==typeof MetamorphENV?MetamorphENV.DISABLE_RANGE_API:"undefined"!==ENV&&ENV.DISABLE_RANGE_API)&&"undefined"!==typeof document&&"createRange"in document&&"undefined"!==typeof Range&&Range.prototype.createContextualFragment,f="undefined"!==typeof document&&function(){var a=document.createElement("div");a.innerHTML=
"<div></div>";a.firstChild.innerHTML="<script>\x3c/script>";return""===a.firstChild.innerHTML}(),l=document&&function(){var a=document.createElement("div");a.innerHTML="Test: <script type='text/x-placeholder'>\x3c/script>Value";return"Test:"===a.childNodes[0].nodeValue&&" Value"===a.childNodes[2].nodeValue}(),k=function(b){var c;c=this instanceof k?this:new a;c.innerHTML=b;b="metamorph-"+m++;c.start=b+"-start";c.end=b+"-end";return c};a.prototype=k.prototype;var d,h,c,b,g;if(n)d=function(a,b){var c=
document.createRange(),d=document.getElementById(a.start),g=document.getElementById(a.end);b?(c.setStartBefore(d),c.setEndAfter(g)):(c.setStartAfter(d),c.setEndBefore(g));return c},h=function(a,b){var c=d(this,b);c.deleteContents();var g=c.createContextualFragment(a);c.insertNode(g)},n=function(){d(this,!0).deleteContents()},c=function(a){var b=document.createRange();b.setStart(a);b.collapse(!1);b=b.createContextualFragment(this.outerHTML());a.appendChild(b)},b=function(a){var b=document.createRange(),
c=document.getElementById(this.end);b.setStartAfter(c);b.setEndAfter(c);a=b.createContextualFragment(a);b.insertNode(a)},g=function(a){var b=document.createRange(),c=document.getElementById(this.start);b.setStartAfter(c);b.setEndAfter(c);a=b.createContextualFragment(a);b.insertNode(a)};else{var p={select:[1,"<select multiple='multiple'>","</select>"],fieldset:[1,"<fieldset>","</fieldset>"],table:[1,"<table>","</table>"],tbody:[2,"<table><tbody>","</tbody></table>"],tr:[3,"<table><tbody><tr>","</tr></tbody></table>"],
colgroup:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],map:[1,"<map>","</map>"],_default:[0,"",""]},u=function(a,b){if(a.getAttribute("id")===b)return a;var c=a.childNodes.length,d,g;for(d=0;d<c;d++)if(g=a.childNodes[d],g=1===g.nodeType&&u(g,b))return g},t=function(a,b){var c=[];l&&(b=b.replace(/(\s+)(<script id='([^']+)')/g,function(a,b,e,d){c.push([d,b]);return e}));a.innerHTML=b;if(0<c.length){var d=c.length,g;for(g=0;g<d;g++){var f=u(a,c[g][0]),h=document.createTextNode(c[g][1]);
f.parentNode.insertBefore(h,f)}}},s=function(a,b){var c=p[a.tagName.toLowerCase()]||p._default,d=c[0],g=c[1],h=c[2];f&&(b="&shy;"+b);c=document.createElement("div");t(c,g+b+h);for(g=0;g<=d;g++)c=c.firstChild;if(f){for(d=c;1===d.nodeType&&!d.nodeName;)d=d.firstChild;3===d.nodeType&&"\u00ad"===d.nodeValue.charAt(0)&&(d.nodeValue=d.nodeValue.slice(1))}return c},q=function(a){for(;""===a.parentNode.tagName;)a=a.parentNode;return a};h=function(a,b){var c=q(document.getElementById(this.start)),d=document.getElementById(this.end),
g=d.parentNode,f,h,k;c.parentNode!==d.parentNode&&d.parentNode.insertBefore(c,d.parentNode.firstChild);for(f=c.nextSibling;f;){h=f.nextSibling;if(k=f===d)if(b)d=f.nextSibling;else break;f.parentNode.removeChild(f);if(k)break;f=h}f=s(c.parentNode,a);for(b&&c.parentNode.removeChild(c);f;)h=f.nextSibling,g.insertBefore(f,d),f=h};n=function(){var a=q(document.getElementById(this.start)),b=document.getElementById(this.end);this.html("");a.parentNode.removeChild(a);b.parentNode.removeChild(b)};c=function(a){for(var b=
s(a,this.outerHTML()),c;b;)c=b.nextSibling,a.appendChild(b),b=c};b=function(a){var b=document.getElementById(this.end),c=b.nextSibling,b=b.parentNode,d;for(d=s(b,a);d;)a=d.nextSibling,b.insertBefore(d,c),d=a};g=function(a){var b=document.getElementById(this.start),c=b.parentNode;a=s(c,a);for(var d=b.nextSibling;a;)b=a.nextSibling,c.insertBefore(a,d),a=b}}k.prototype.html=function(a){this.checkRemoved();if(void 0===a)return this.innerHTML;h.call(this,a);this.innerHTML=a};k.prototype.replaceWith=function(a){this.checkRemoved();
h.call(this,a,!0)};k.prototype.remove=n;k.prototype.outerHTML=function(){return this.startTag()+this.innerHTML+this.endTag()};k.prototype.appendTo=c;k.prototype.after=b;k.prototype.prepend=g;k.prototype.startTag=function(){return"<script id='"+this.start+"' type='text/x-placeholder'>\x3c/script>"};k.prototype.endTag=function(){return"<script id='"+this.end+"' type='text/x-placeholder'>\x3c/script>"};k.prototype.isRemoved=function(){var a=document.getElementById(this.start),b=document.getElementById(this.end);
return!a||!b};k.prototype.checkRemoved=function(){if(this.isRemoved())throw Error("Cannot perform operations on a Metamorph that is not in the DOM.");};return k});t("route-recognizer",["exports"],function(a){function m(a){this.string=a}function n(a){this.name=a}function f(a){this.name=a}function l(){}function k(a){this.charSpec=a;this.nextStates=[]}function d(a){return a.sort(function(a,b){if(a.types.stars!==b.types.stars)return a.types.stars-b.types.stars;if(a.types.stars){if(a.types.statics!==b.types.statics)return b.types.statics-
a.types.statics;if(a.types.dynamics!==b.types.dynamics)return b.types.dynamics-a.types.dynamics}return a.types.dynamics!==b.types.dynamics?a.types.dynamics-b.types.dynamics:a.types.statics!==b.types.statics?b.types.statics-a.types.statics:0})}function h(a){this.queryParams=a||{}}function c(a,b){b.eachChar(function(b){a=a.put(b)});return a}function b(a,b,c){this.path=a;this.matcher=b;this.delegate=c}function g(a){this.routes={};this.children={};this.target=a}function p(a,c,d){return function(g,f){var h=
a+g;if(f)f(p(h,c,d));else return new b(a+g,c,d)}}function u(a,b,c,d){var g=b.routes,f;for(f in g)if(g.hasOwnProperty(f)){for(var h=a.slice(),k=h,l=f,m=g[f],p=0,n=0,s=k.length;n<s;n++)p+=k[n].path.length;l=l.substr(p);k.push({path:l,handler:m});b.children[f]?u(h,b.children[f],c,d):c.call(d,h)}}var t=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\)/g;m.prototype={eachChar:function(a){for(var b=this.string,c,d=0,g=b.length;d<g;d++)c=b.charAt(d),a({validChars:c})},regex:function(){return this.string.replace(t,
"\\$1")},generate:function(){return this.string}};n.prototype={eachChar:function(a){a({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(a){return a[this.name]}};f.prototype={eachChar:function(a){a({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(a){return a[this.name]}};l.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}};k.prototype={get:function(a){for(var b=this.nextStates,c=0,d=b.length;c<d;c++){var g=
b[c],f=g.charSpec.validChars===a.validChars;if(f=f&&g.charSpec.invalidChars===a.invalidChars)return g}},put:function(a){var b;if(b=this.get(a))return b;b=new k(a);this.nextStates.push(b);a.repeat&&b.nextStates.push(b);return b},match:function(a){for(var b=this.nextStates,c,d,g,f=[],h=0,k=b.length;h<k;h++)c=b[h],d=c.charSpec,"undefined"!==typeof(g=d.validChars)?-1!==g.indexOf(a)&&f.push(c):"undefined"!==typeof(g=d.invalidChars)&&-1===g.indexOf(a)&&f.push(c);return f}};h.prototype=(Object.create||function(a){function b(){}
b.prototype=a;return new b})({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var s=function(){this.rootState=new k;this.names={}};s.prototype={add:function(a,b){for(var d=this.rootState,g="^",h={statics:0,dynamics:0,stars:0},k=[],p=[],s=!0,t=0,u=a.length;t<u;t++){var w=a[t],D=[],L,H=w.path;L=D;var K=h;"/"===H.charAt(0)&&(H=H.substr(1));for(var H=H.split("/"),Q=[],I=0,N=H.length;I<N;I++){var z=H[I],F;(F=z.match(/^:([^\/]+)$/))?(Q.push(new n(F[1])),
L.push(F[1]),K.dynamics++):(F=z.match(/^\*([^\/]+)$/))?(Q.push(new f(F[1])),L.push(F[1]),K.stars++):""===z?Q.push(new l):(Q.push(new m(z)),K.statics++)}L=Q;p=p.concat(L);K=0;for(H=L.length;K<H;K++)Q=L[K],Q instanceof l||(s=!1,d=d.put({validChars:"/"}),g+="/",d=c(d,Q),g+=Q.regex());k.push({handler:w.handler,names:D})}s&&(d=d.put({validChars:"/"}),g+="/");d.handlers=k;d.regex=RegExp(g+"$");d.types=h;if(d=b&&b.as)this.names[d]={segments:p,handlers:k}},handlersFor:function(a){var b=this.names[a],c=[];
if(!b)throw Error("There is no route named "+a);a=0;for(var d=b.handlers.length;a<d;a++)c.push(b.handlers[a]);return c},hasRoute:function(a){return!!this.names[a]},generate:function(a,b){var c=this.names[a],d="";if(!c)throw Error("There is no route named "+a);for(var g=c.segments,f=0,h=g.length;f<h;f++){var k=g[f];k instanceof l||(d+="/",d+=k.generate(b))}"/"!==d.charAt(0)&&(d="/"+d);b&&b.queryParams&&(d+=this.generateQueryString(b.queryParams,c.handlers));return d},generateQueryString:function(a,
b){var c=[],d=[],g;for(g in a)a.hasOwnProperty(g)&&d.push(g);d.sort();for(var f=0,h=d.length;f<h;f++){g=d[f];var k=a[g];if(null!=k){var l=g;if("[object Array]"===Object.prototype.toString.call(k))for(var l=0,m=k.length;l<m;l++){var p=g+"[]="+encodeURIComponent(k[l]);c.push(p)}else l+="="+encodeURIComponent(k),c.push(l)}}return 0===c.length?"":"?"+c.join("&")},parseQueryString:function(a){a=a.split("&");for(var b={},c=0;c<a.length;c++){var d=a[c].split("="),g=decodeURIComponent(d[0]),f=g.length,h=
!1;1===d.length?d="true":(2<f&&"[]"===g.slice(f-2)&&(h=!0,g=g.slice(0,f-2),b[g]||(b[g]=[])),d=d[1]?decodeURIComponent(d[1]):"");h?b[g].push(d):b[g]=decodeURIComponent(d)}return b},recognize:function(a){var b=[this.rootState],c,g,f={},k=!1;a=decodeURI(a);c=a.indexOf("?");-1!==c&&(f=a.substr(c+1,a.length),a=a.substr(0,c),f=this.parseQueryString(f));"/"!==a.charAt(0)&&(a="/"+a);c=a.length;1<c&&"/"===a.charAt(c-1)&&(a=a.substr(0,c-1),k=!0);c=0;for(g=a.length;c<g;c++){for(var l=a.charAt(c),m=[],p=0,n=
b.length;p<n;p++)m=m.concat(b[p].match(l));b=m;if(!b.length)break}l=[];c=0;for(g=b.length;c<g;c++)b[c].handlers&&l.push(b[c]);d(l);if((c=l[0])&&c.handlers){k&&"(.+)$"===c.regex.source.slice(-5)&&(a+="/");g=f;k=c.handlers;a=a.match(c.regex);f=1;c=new h(g);g=0;for(b=k.length;g<b;g++){for(var l=k[g],m=l.names,p={},n=0,s=m.length;n<s;n++)p[m[n]]=a[f++];c.push({handler:l.handler,params:p,isDynamic:!!m.length})}return c}}};a["default"]=s;b.prototype={to:function(a,b){var c=this.delegate;c&&c.willAddRoute&&
(a=c.willAddRoute(this.matcher.target,a));this.matcher.add(this.path,a);if(b){if(0===b.length)throw Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,a,b,this.delegate)}return this}};g.prototype={add:function(a,b){this.routes[a]=b},addChild:function(a,b,c,d){var f=new g(b);this.children[a]=f;a=p(a,f,d);d&&d.contextEntered&&d.contextEntered(b,a);c(a)}};s.prototype.map=function(a,b){var c=new g;a(p("",c,this.delegate));u([],c,function(a){b?b(this,a):this.add(a)},
this)}});t("router/handler-info",["./utils","rsvp/promise","exports"],function(a,m,n){function f(a){a=a||{};d(this,a);this.initialize(a)}function l(a,c){if(!a^!c)return!1;if(!a)return!0;for(var d in a)if(a.hasOwnProperty(d)&&a[d]!==c[d])return!1;return!0}var k=a.bind,d=a.merge,h=a.promiseLabel,c=m["default"];f.prototype={name:null,handler:null,params:null,context:null,factory:null,initialize:function(){},log:function(a,c){a.log&&a.log(this.name+": "+c)},promiseLabel:function(a){return h("'"+this.name+
"' "+a)},getUnresolved:function(){return this},serialize:function(){return this.params||{}},resolve:function(a,d){var f=k(this,this.checkForAbort,a),h=k(this,this.runBeforeModelHook,d),l=k(this,this.getModel,d),m=k(this,this.runAfterModelHook,d),q=k(this,this.becomeResolved,d);return c.resolve(void 0,this.promiseLabel("Start handler")).then(f,null,this.promiseLabel("Check for abort")).then(h,null,this.promiseLabel("Before model")).then(f,null,this.promiseLabel("Check if aborted during 'beforeModel' hook")).then(l,
null,this.promiseLabel("Model")).then(f,null,this.promiseLabel("Check if aborted in 'model' hook")).then(m,null,this.promiseLabel("After model")).then(f,null,this.promiseLabel("Check if aborted in 'afterModel' hook")).then(q,null,this.promiseLabel("Become resolved"))},runBeforeModelHook:function(a){a.trigger&&a.trigger(!0,"willResolveModel",a,this.handler);return this.runSharedModelHook(a,"beforeModel",[])},runAfterModelHook:function(a,c){var d=this.name;this.stashResolvedModel(a,c);return this.runSharedModelHook(a,
"afterModel",[c]).then(function(){return a.resolvedModels[d]},null,this.promiseLabel("Ignore fulfillment value and return model value"))},runSharedModelHook:function(a,d,f){this.log(a,"calling "+d+" hook");this.queryParams&&f.push(this.queryParams);f.push(a);a=this.handler;(d=a[d]&&a[d].apply(a,f))&&d.isTransition&&(d=null);return c.resolve(d,null,this.promiseLabel("Resolve value returned from one of the model hooks"))},getModel:null,checkForAbort:function(a,d){return c.resolve(a(),this.promiseLabel("Check for abort")).then(function(){return d},
null,this.promiseLabel("Ignore fulfillment value and continue"))},stashResolvedModel:function(a,c){a.resolvedModels=a.resolvedModels||{};a.resolvedModels[this.name]=c},becomeResolved:function(a,c){var d=this.serialize(c);a&&(this.stashResolvedModel(a,c),a.params=a.params||{},a.params[this.name]=d);return this.factory("resolved",{context:c,name:this.name,handler:this.handler,params:d})},shouldSupercede:function(a){if(!a)return!0;var c=a.context===this.context;return a.name!==this.name||this.hasOwnProperty("context")&&
!c||this.hasOwnProperty("params")&&!l(this.params,a.params)}};n["default"]=f});t("router/handler-info/factory",["router/handler-info/resolved-handler-info","router/handler-info/unresolved-handler-info-by-object","router/handler-info/unresolved-handler-info-by-param","exports"],function(a,m,n,f){function l(a,d){var f=new l.klasses[a](d||{});f.factory=l;return f}l.klasses={resolved:a["default"],param:n["default"],object:m["default"]};f["default"]=l});t("router/handler-info/resolved-handler-info",["../handler-info",
"router/utils","rsvp/promise","exports"],function(a,m,n,f){m=m.subclass;var l=n["default"];a=m(a["default"],{resolve:function(a,d){d&&d.resolvedModels&&(d.resolvedModels[this.name]=this.context);return l.resolve(this,this.promiseLabel("Resolve"))},getUnresolved:function(){return this.factory("param",{name:this.name,handler:this.handler,params:this.params})},isResolved:!0});f["default"]=a});t("router/handler-info/unresolved-handler-info-by-object",["../handler-info","router/utils","rsvp/promise","exports"],
function(a,m,n,f){var l=m.subclass,k=m.isParam,d=n["default"];a=l(a["default"],{getModel:function(a){this.log(a,this.name+": resolving provided model");return d.resolve(this.context)},initialize:function(a){this.names=a.names||[];this.context=a.context},serialize:function(a){a=a||this.context;var c=this.names,b=this.handler,d={};if(k(a))return d[c[0]]=a,d;if(b.serialize)return b.serialize(a,c);if(1===c.length)return c=c[0],/_id$/.test(c)?d[c]=a.id:d[c]=a,d}});f["default"]=a});t("router/handler-info/unresolved-handler-info-by-param",
["../handler-info","router/utils","exports"],function(a,m,n){var f=m.merge;m=m.subclass;a=m(a["default"],{initialize:function(a){this.params=a.params||{}},getModel:function(a){var k=this.params;a&&a.queryParams&&(k={},f(k,this.params),k.queryParams=a.queryParams);return this.runSharedModelHook(a,"function"===typeof this.handler.deserialize?"deserialize":"model",[k])}});n["default"]=a});t("router/router","route-recognizer rsvp/promise ./utils ./transition-state ./transition ./transition-intent/named-transition-intent ./transition-intent/url-transition-intent ./handler-info exports".split(" "),
function(a,m,n,f,l,k,d,h,c){function b(){this.recognizer=new v;this.reset()}function g(a,b,c){var d=t(a.state,b);B(d.exited,function(a){a=a.handler;delete a.context;a.exit&&a.exit()});var g=a.oldState=a.state;a.state=b;var f=a.currentHandlerInfos=d.unchanged.slice();try{B(d.updatedContext,function(a){return p(f,a,!1,c)}),B(d.entered,function(a){return p(f,a,!0,c)})}catch(h){throw a.state=g,a.currentHandlerInfos=g.handlerInfos,h;}a.state.queryParams=e(a,f,b.queryParams,c)}function p(a,b,c,d){var e=
b.handler,g=b.context;c&&e.enter&&e.enter(d);if(d&&d.isAborted)throw new I;e.context=g;e.contextDidChange&&e.contextDidChange();e.setup&&e.setup(g,d);if(d&&d.isAborted)throw new I;a.push(b);return!0}function t(a,b){var c=a.handlerInfos,d=b.handlerInfos,e={updatedContext:[],exited:[],entered:[],unchanged:[]},g,f,h,k;h=0;for(k=d.length;h<k;h++){var l=c[h],m=d[h];if(!l||l.handler!==m.handler)g=!0;g?(e.entered.push(m),l&&e.exited.unshift(l)):f||l.context!==m.context?(f=!0,e.updatedContext.push(m)):e.unchanged.push(l)}h=
d.length;for(k=c.length;h<k;h++)e.exited.unshift(c[h]);return e}function w(a,b,c){if(c=a.urlMethod){for(var d=a.router,e=b.handlerInfos,g=e[e.length-1].name,f={},h=e.length-1;0<=h;--h){var k=e[h];C(f,k.params);k.handler.inaccessibleByURL&&(c=null)}c&&(f.queryParams=a._visibleQueryParams||b.queryParams,a=d.recognizer.generate(g,f),"replace"===c?d.replaceURL(a):d.updateURL(a))}}function s(a,b,c){var d=b[0]||"/",e=b[b.length-1],g={};e&&e.hasOwnProperty("queryParams")&&(g=F.call(b).queryParams);0===b.length?
(x(a,"Updating query params"),b=a.state.handlerInfos,g=new N({name:b[b.length-1].name,contexts:[],queryParams:g})):"/"===d.charAt(0)?(x(a,"Attempting URL transition to "+d),g=new z({url:d})):(x(a,"Attempting transition to "+d),g=new N({name:b[0],contexts:D.call(b,1),queryParams:g}));return a.transitionByIntent(g,c)}function q(a,b){if(a.length!==b.length)return!1;for(var c=0,d=a.length;c<d;++c)if(a[c]!==b[c])return!1;return!0}function e(a,b,c,d){for(var e in c)c.hasOwnProperty(e)&&null===c[e]&&delete c[e];
e=[];A(a,b,!0,["finalizeQueryParamChange",c,e,d]);d&&(d._visibleQueryParams={});a={};b=0;for(c=e.length;b<c;++b){var g=e[b];a[g.key]=g.value;d&&!1!==g.visible&&(d._visibleQueryParams[g.key]=g.value)}return a}function r(a,b,c){var d=a.state.handlerInfos,e=[],g=null,f,h,k,l;for(h=0;h<d.length;h++){k=d[h];l=b.handlerInfos[h];if(!l||k.name!==l.name){g=h;break}l.isResolved||e.push(k)}null!==g&&(f=d.slice(g,d.length),b=function(a){for(var b=0;b<f.length;b++)if(f[b].name===a)return!0;return!1},a._triggerWillLeave(f,
c,b));0<e.length&&a._triggerWillChangeContext(e,c);A(a,d,!0,["willTransition",c])}var v=a["default"],y=m["default"],A=n.trigger,x=n.log,D=n.slice,B=n.forEach,C=n.merge,E=n.extractQueryParams,M=n.getChangelist,L=n.promiseLabel,H=f["default"],K=l.logAbort,Q=l.Transition,I=l.TransitionAborted,N=k["default"],z=d["default"],F=Array.prototype.pop;b.prototype={map:function(a){this.recognizer.delegate=this.delegate;this.recognizer.map(a,function(a,b){for(var c=b.length-1,d=!0;0<=c&&d;--c)d=b[c],a.add(b,{as:d.handler}),
d="/"===d.path||""===d.path||".index"===d.handler.slice(-6)})},hasRoute:function(a){return this.recognizer.hasRoute(a)},transitionByIntent:function(a,b){var c=!!this.activeTransition,d=c?this.activeTransition.state:this.state,f,h=this;try{var k=a.applyToState(d,this.recognizer,this.getHandler,b);if(q(k.handlerInfos,d.handlerInfos)){var l=M(d.queryParams,k.queryParams);if(l){this._changedQueryParams=l.changed;for(var m in l.removed)l.removed.hasOwnProperty(m)&&(this._changedQueryParams[m]=null);A(this,
k.handlerInfos,!0,["queryParamsDidChange",l.changed,l.all,l.removed]);this._changedQueryParams=null;if(!c&&this.activeTransition)return this.activeTransition;f=new Q(this);d.queryParams=e(this,k.handlerInfos,k.queryParams,f);f.promise=f.promise.then(function(a){w(f,d,!0);h.didTransition&&h.didTransition(h.currentHandlerInfos);return a},null,L("Transition complete"));return f}return new Q(this)}if(b)g(this,k);else return f=new Q(this,a,k),this.activeTransition&&this.activeTransition.abort(),this.activeTransition=
f,f.promise=f.promise.then(function(a){var b;var c=f;a=a.state;try{x(c.router,c.sequence,"Resolved all models on destination route; finalizing transition.");var d=c.router,e=a.handlerInfos;g(d,a,c);c.isAborted?(d.state.handlerInfos=d.currentHandlerInfos,b=y.reject(K(c))):(w(c,a,c.intent.url),c.isActive=!1,d.activeTransition=null,A(d,d.currentHandlerInfos,!0,["didTransition"]),d.didTransition&&d.didTransition(d.currentHandlerInfos),x(d,c.sequence,"TRANSITION COMPLETE."),b=e[e.length-1].handler)}catch(h){throw h instanceof
I||(b=c.state.handlerInfos,c.trigger(!0,"error",h,c,b[b.length-1].handler),c.abort()),h;}return b},null,L("Settle transition promise when transition is finalized")),c||r(this,k,f),f}catch(p){return new Q(this,a,null,p)}},reset:function(){this.state&&B(this.state.handlerInfos,function(a){a=a.handler;a.exit&&a.exit()});this.state=new H;this.currentHandlerInfos=null},activeTransition:null,handleURL:function(a){var b=D.call(arguments);"/"!==a.charAt(0)&&(b[0]="/"+a);return s(this,b).method(null)},updateURL:function(){throw Error("updateURL is not implemented");
},replaceURL:function(a){this.updateURL(a)},transitionTo:function(a){return s(this,arguments)},intermediateTransitionTo:function(a){s(this,arguments,!0)},refresh:function(a){for(var b=this.activeTransition?this.activeTransition.state:this.state,c=b.handlerInfos,d=0,e=c.length;d<e;++d);x(this,"Starting a refresh transition");a=new N({name:c[c.length-1].name,pivotHandler:a||c[0].handler,contexts:[],queryParams:this._changedQueryParams||b.queryParams||{}});return this.transitionByIntent(a,!1)},replaceWith:function(a){return s(this,
arguments).method("replace")},generate:function(a){for(var b=E(D.call(arguments,1)),c=b[1],b=(new N({name:a,contexts:b[0]})).applyToState(this.state,this.recognizer,this.getHandler),d={},e=0,g=b.handlerInfos.length;e<g;++e){var f=b.handlerInfos[e].serialize();C(d,f)}d.queryParams=c;return this.recognizer.generate(a,d)},isActive:function(a){var b=E(D.call(arguments,1)),c=b[0],b=b[1],d=this.state.queryParams,e=this.state.handlerInfos,g,f;if(!e.length)return!1;var h=e[e.length-1].name,k=this.recognizer.handlersFor(h),
l=0;for(f=k.length;l<f&&!(g=e[l],g.name===a);++l);if(l===k.length)return!1;g=new H;g.handlerInfos=e.slice(0,l+1);k=k.slice(0,l+1);c=(new N({name:h,contexts:c})).applyToHandlers(g,k,this.getHandler,h,!0,!0);e={};C(e,b);for(var m in d)d.hasOwnProperty(m)&&e.hasOwnProperty(m)&&(e[m]=d[m]);return q(c.handlerInfos,g.handlerInfos)&&!M(e,b)},trigger:function(a){var b=D.call(arguments);A(this,this.currentHandlerInfos,!1,b)},log:null,_willChangeContextEvent:"willChangeContext",_triggerWillChangeContext:function(a,
b){A(this,a,!0,[this._willChangeContextEvent,b])},_triggerWillLeave:function(a,b,c){A(this,a,!0,["willLeave",b,c])}};c["default"]=b});t("router/transition-intent",["./utils","exports"],function(a,m){function n(a){this.initialize(a);this.data=this.data||{}}n.prototype={initialize:null,applyToState:null};m["default"]=n});t("router/transition-intent/named-transition-intent",["../transition-intent","../transition-state","../handler-info/factory","../utils","exports"],function(a,m,n,f,l){var k=m["default"],
d=n["default"],h=f.isParam,c=f.extractQueryParams,b=f.merge;m=f.subclass;l["default"]=m(a["default"],{name:null,pivotHandler:null,contexts:null,queryParams:null,initialize:function(a){this.name=a.name;this.pivotHandler=a.pivotHandler;this.contexts=a.contexts||[];this.queryParams=a.queryParams},applyToState:function(a,b,d,f){var h=c([this.name].concat(this.contexts))[0];b=b.handlersFor(h[0]);return this.applyToHandlers(a,b,d,b[b.length-1].handler,f)},applyToHandlers:function(a,c,d,f,h,l){var e,m=new k,
n=this.contexts.slice(0),t=c.length;if(this.pivotHandler)for(e=0;e<c.length;++e)if(d(c[e].handler)===this.pivotHandler){t=e;break}for(e=c.length-1;0<=e;--e){var A=c[e],x=A.handler,D=d(x),B=a.handlerInfos[e],C=null,C=0<A.names.length?e>=t?this.createParamHandlerInfo(x,D,A.names,n,B):this.getHandlerInfoForDynamicSegment(x,D,A.names,n,B,f,e):this.createParamHandlerInfo(x,D,A.names,n,B);l&&(C=C.becomeResolved(null,C.context),x=B&&B.context,0<A.names.length&&C.context===x&&(C.params=B&&B.params),C.context=
x);A=B;if(e>=t||C.shouldSupercede(B))t=Math.min(e,t),A=C;h&&!l&&(A=A.becomeResolved(null,A.context));m.handlerInfos.unshift(A)}if(0<n.length)throw Error("More context objects were passed than there are dynamic segments for the route: "+f);h||this.invalidateChildren(m.handlerInfos,t);b(m.queryParams,a.queryParams);b(m.queryParams,this.queryParams||{});return m},invalidateChildren:function(a,b){for(var c=b,d=a.length;c<d;++c)a[c]=a[c].getUnresolved()},getHandlerInfoForDynamicSegment:function(a,b,c,
f,k,l,e){if(0<f.length){l=f[f.length-1];if(h(l))return this.createParamHandlerInfo(a,b,c,f,k);f.pop()}else if(!(k&&k.name===a)&&this.preTransitionState)l=(f=this.preTransitionState.handlerInfos[e])&&f.context;else return k;return d("object",{name:a,handler:b,context:l,names:c})},createParamHandlerInfo:function(a,b,c,f,k){for(var l={},e=c.length;e--;){var m=k&&a===k.name&&k.params||{},n=c[e];if(h(f[f.length-1]))l[n]=""+f.pop();else if(m.hasOwnProperty(n))l[n]=m[n];else throw Error("You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route "+
a);}return d("param",{name:a,handler:b,params:l})}})});t("router/transition-intent/url-transition-intent",["../transition-intent","../transition-state","../handler-info/factory","../utils","exports"],function(a,m,n,f,l){function k(a){this.message=a||"UnrecognizedURLError";this.name="UnrecognizedURLError"}var d=m["default"],h=n["default"],c=f.merge;m=f.subclass;l["default"]=m(a["default"],{url:null,initialize:function(a){this.url=a.url},applyToState:function(a,g,f){var l=new d;g=g.recognize(this.url);
var m,n;if(!g)throw new k(this.url);var q=!1;m=0;for(n=g.length;m<n;++m){var e=g[m],r=e.handler,t=f(r);if(t.inaccessibleByURL)throw new k(this.url);e=h("param",{name:r,handler:t,params:e.params});r=a.handlerInfos[m];q||e.shouldSupercede(r)?(q=!0,l.handlerInfos[m]=e):l.handlerInfos[m]=r}c(l.queryParams,g.queryParams);return l}})});t("router/transition-state",["./handler-info","./utils","rsvp/promise","exports"],function(a,m,n,f){function l(a){this.handlerInfos=[];this.queryParams={};this.params={}}
var k=m.forEach,d=m.promiseLabel,h=n["default"];l.prototype={handlerInfos:null,queryParams:null,params:null,promiseLabel:function(a){var b="";k(this.handlerInfos,function(a){""!==b&&(b+=".");b+=a.name});return d("'"+b+"': "+a)},resolve:function(a,b){function g(){return h.resolve(a(),d("Check if should continue"))["catch"](function(a){q=!0;return h.reject(a)},d("Handle abort"))}function f(a){var c=n.handlerInfos[b.resolveIndex].isResolved;n.handlerInfos[b.resolveIndex++]=a;c||(c=a.handler)&&c.redirect&&
c.redirect(a.context,b);return g().then(l,null,d("Resolve handler"))}function l(){return b.resolveIndex===n.handlerInfos.length?{error:null,state:n}:n.handlerInfos[b.resolveIndex].resolve(g,b).then(f,null,d("Proceed"))}var m=this.params;k(this.handlerInfos,function(a){m[a.name]=a.params||{}});b=b||{};b.resolveIndex=0;var n=this,q=!1;return h.resolve(null,this.promiseLabel("Start transition")).then(l,null,this.promiseLabel("Resolve handler"))["catch"](function(a){var c=n.handlerInfos;return h.reject({error:a,
handlerWithError:n.handlerInfos[b.resolveIndex>=c.length?c.length-1:b.resolveIndex].handler,wasAborted:q,state:n})},this.promiseLabel("Handle error"))}};f["default"]=l});t("router/transition",["rsvp/promise","./handler-info","./utils","exports"],function(a,m,n,f){function l(a,b,c,d){function e(){if(g.isAborted)return h.reject(void 0,p("Transition aborted - reject"))}var g=this;this.state=c||a.state;this.intent=b;this.router=a;this.data=this.intent&&this.intent.data||{};this.resolvedModels={};this.queryParams=
{};if(d)this.promise=h.reject(d);else if(c){this.params=c.params;this.queryParams=c.queryParams;if(a=c.handlerInfos.length)this.targetName=c.handlerInfos[c.handlerInfos.length-1].name;for(b=0;b<a;++b){d=c.handlerInfos[b];if(!d.isResolved)break;this.pivotHandler=d.handler}this.sequence=l.currentSequence++;this.promise=c.resolve(e,this)["catch"](function(a){if(a.wasAborted||g.isAborted)return h.reject(k(g));g.trigger("error",a.error,g,a.handlerWithError);g.abort();return h.reject(a.error)},p("Handle Abort"))}else this.promise=
h.resolve(this.state),this.params={}}function k(a){g(a.router,a.sequence,"detected abort.");return new d}function d(a){this.message=a||"TransitionAborted";this.name="TransitionAborted"}var h=a["default"],c=n.trigger,b=n.slice,g=n.log,p=n.promiseLabel;l.currentSequence=0;l.prototype={targetName:null,urlMethod:"update",intent:null,params:null,pivotHandler:null,resolveIndex:0,handlerInfos:null,resolvedModels:null,isActive:!0,state:null,isTransition:!0,promise:null,data:null,then:function(a,b){return this.promise.then(a,
b)},abort:function(){if(this.isAborted)return this;g(this.router,this.sequence,this.targetName+": transition was aborted");this.intent.preTransitionState=this.router.state;this.isAborted=!0;this.isActive=!1;this.router.activeTransition=null;return this},retry:function(){this.abort();return this.router.transitionByIntent(this.intent,!1)},method:function(a){this.urlMethod=a;return this},trigger:function(a){var d=b.call(arguments);"boolean"===typeof a?d.shift():a=!1;c(this.router,this.state.handlerInfos.slice(0,
this.resolveIndex+1),a,d)},followRedirects:function(){var a=this.router;return this.promise["catch"](function(b){return a.activeTransition?a.activeTransition.followRedirects():h.reject(b)})},toString:function(){return"Transition (sequence "+this.sequence+")"},log:function(a){g(this.router,this.sequence,a)}};l.prototype.send=l.prototype.trigger;f.Transition=l;f.logAbort=k;f.TransitionAborted=d});t("router/utils",["exports"],function(a){function m(a,f){for(var c in f)f.hasOwnProperty(c)&&(a[c]=f[c])}
function n(a){for(var f in a)if("number"===typeof a[f])a[f]=""+a[f];else if(l(a[f]))for(var c=0,b=a[f].length;c<b;c++)a[f][c]=""+a[f][c]}var f=Array.prototype.slice,l=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};a.isArray=l;var k=Object.create||function(a){function f(){}f.prototype=a;return new f};a.oCreate=k;a.extractQueryParams=function(a){var h=a&&a.length,c;return h&&0<h&&a[h-1]&&a[h-1].hasOwnProperty("queryParams")?(c=a[h-1].queryParams,
a=f.call(a,0,h-1),[a,c]):[a,null]};a.log=function(a,f,c){a.log&&(3===arguments.length?a.log("Transition #"+f+": "+c):a.log(f))};a.bind=function(a,h){var c=arguments;return function(b){var g=f.call(c,2);g.push(b);return h.apply(a,g)}};a.forEach=function(a,f){for(var c=0,b=a.length;c<b&&!1!==f(a[c]);c++);};a.trigger=function(a,f,c,b){if(a.triggerEvent)a.triggerEvent(f,c,b);else{a=b.shift();if(!f){if(c)return;throw Error("Could not trigger event '"+a+"'. There are no active handlers");}for(var g=!1,
k=f.length-1;0<=k;k--){var l=f[k].handler;if(l.events&&l.events[a])if(!0===l.events[a].apply(l,b))g=!0;else return}if(!g&&!c)throw Error("Nothing handled the event '"+a+"'.");}};a.getChangelist=function(a,f){var c,b={all:{},changed:{},removed:{}};m(b.all,f);var g=!1;n(a);n(f);for(c in a)a.hasOwnProperty(c)&&!f.hasOwnProperty(c)&&(g=!0,b.removed[c]=a[c]);for(c in f)if(f.hasOwnProperty(c))if(l(a[c])&&l(f[c]))if(a[c].length!==f[c].length)b.changed[c]=f[c],g=!0;else for(var k=0,t=a[c].length;k<t;k++)a[c][k]!==
f[c][k]&&(b.changed[c]=f[c],g=!0);else a[c]!==f[c]&&(b.changed[c]=f[c],g=!0);return g&&b};a.promiseLabel=function(a){return"Router: "+a};a.subclass=function(a,f){function c(b){a.call(this,b||{})}c.prototype=k(a.prototype);m(c.prototype,f);return c};a.merge=m;a.slice=f;a.isParam=function(a){return"string"===typeof a||a instanceof String||"number"===typeof a||a instanceof Number};a.coerceQueryParamsToString=n});t("router",["./router/router","exports"],function(a,m){m["default"]=a["default"]});t("rsvp/-internal",
["./utils","./instrument","./config","exports"],function(a,m,n,f){function l(a,b,c,d){try{a.call(b,c,d)}catch(e){return e}}function k(a,c,d){v.async(function(a){var e=!1,f=l(d,c,function(d){e||(e=!0,c!==d?h(a,d):b(a,d))},function(b){e||(e=!0,g(a,b))},"Settle: "+(a._label||" unknown promise"));!e&&f&&(e=!0,g(a,f))},a)}function d(a,c){a._onerror=null;c._state===A?b(a,c._result):a._state===x?g(a,c._result):p(c,void 0,function(d){c!==d?h(a,d):b(a,d)},function(b){g(a,b)})}function h(a,c){if(a===c)b(a,
c);else if(q(c))if(c instanceof a.constructor)d(a,c);else{var f;try{f=c.then}catch(h){D.error=h,f=D}f===D?g(a,D.error):void 0===f?b(a,c):e(f)?k(a,c,f):b(a,c)}else b(a,c)}function c(a){a._onerror&&a._onerror(a._result);t(a)}function b(a,b){a._state===y&&(a._result=b,a._state=A,0===a._subscribers.length?v.instrument&&r("fulfilled",a):v.async(t,a))}function g(a,b){a._state===y&&(a._state=x,a._result=b,v.async(c,a))}function p(a,b,c,d){var e=a._subscribers,f=e.length;a._onerror=null;e[f]=b;e[f+A]=c;e[f+
x]=d;0===f&&a._state&&v.async(t,a)}function t(a){var b=a._subscribers,c=a._state;v.instrument&&r(c===A?"fulfilled":"rejected",a);if(0!==b.length){for(var d,e,f=a._result,g=0;g<b.length;g+=3)d=b[g],e=b[g+c],d?s(c,d,e,f):e(f);a._subscribers.length=0}}function w(){this.error=null}function s(a,c,d,f){var k=e(d),l,m,p,n;if(k){try{l=d(f)}catch(q){B.error=q,l=B}l===B?(n=!0,m=l.error,l=null):p=!0;if(c===l){g(c,new TypeError("A promises callback cannot return that same promise."));return}}else l=f,p=!0;c._state===
y&&(k&&p?h(c,l):n?g(c,m):a===A?b(c,l):a===x&&g(c,l))}var q=a.objectOrFunction,e=a.isFunction,r=m["default"],v=n.config,y=void 0,A=1,x=2,D=new w,B=new w;f.noop=function(){};f.resolve=h;f.reject=g;f.fulfill=b;f.subscribe=p;f.publish=t;f.publishRejection=c;f.initializePromise=function(a,b){try{b(function(b){h(a,b)},function(b){g(a,b)})}catch(c){g(a,c)}};f.invokeCallback=s;f.FULFILLED=A;f.REJECTED=x});t("rsvp/all-settled",["./enumerator","./promise","./utils","exports"],function(a,m,n,f){function l(a,
c,b){this._superConstructor(a,c,!1,b)}var k=a["default"];a=a.makeSettledResult;var d=m["default"];m=n.o_create;l.prototype=m(k.prototype);l.prototype._superConstructor=k;l.prototype._makeResult=a;l.prototype._validationError=function(){return Error("allSettled must be called with an array")};f["default"]=function(a,c){return(new l(d,a,c)).promise}});t("rsvp/all",["./promise","exports"],function(a,m){var n=a["default"];m["default"]=function(a,l){return n.all(a,l)}});t("rsvp/asap",["exports"],function(a){function m(){return function(){process.nextTick(k)}}
function n(){var a=0,b=new h(k),c=document.createTextNode("");b.observe(c,{characterData:!0});return function(){c.data=a=++a%2}}function f(){var a=new MessageChannel;a.port1.onmessage=k;return function(){a.port2.postMessage(0)}}function l(){return function(){setTimeout(k,1)}}function k(){for(var a=0;a<d;a+=2)(0,c[a])(c[a+1]),c[a]=void 0,c[a+1]=void 0;d=0}var d=0;a["default"]=function(a,f){c[d]=a;c[d+1]=f;d+=2;2===d&&b()};a="undefined"!==typeof window?window:{};var h=a.MutationObserver||a.WebKitMutationObserver;
a="undefined"!==typeof Uint8ClampedArray&&"undefined"!==typeof importScripts&&"undefined"!==typeof MessageChannel;var c=Array(1E3),b;b="undefined"!==typeof process&&"[object process]"==={}.toString.call(process)?m():h?n():a?f():l()});t("rsvp/config",["./events","exports"],function(a,m){var n={instrument:!1};a["default"].mixin(n);m.config=n;m.configure=function(a,l){if("onerror"===a)n.on("error",l);else if(2===arguments.length)n[a]=l;else return n[a]}});t("rsvp/defer",["./promise","exports"],function(a,
m){var n=a["default"];m["default"]=function(a){var l={};l.promise=new n(function(a,d){l.resolve=a;l.reject=d},a);return l}});t("rsvp/enumerator",["./utils","./-internal","exports"],function(a,m,n){function f(a,b,f,e){this._instanceConstructor=a;this.promise=new a(d,e);this._abortOnReject=f;this._validateInput(b)?(this._input=b,this._remaining=this.length=b.length,this._init(),0===this.length?c(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&c(this.promise,
this._result))):h(this.promise,this._validationError())}var l=a.isArray,k=a.isMaybeThenable,d=m.noop,h=m.reject,c=m.fulfill,b=m.subscribe,g=m.FULFILLED,p=m.REJECTED,t=m.PENDING;n.ABORT_ON_REJECTION=!0;n.makeSettledResult=function(a,b,c){return a===g?{state:"fulfilled",value:c}:{state:"rejected",reason:c}};f.prototype._validateInput=function(a){return l(a)};f.prototype._validationError=function(){return Error("Array Methods must be provided an Array")};f.prototype._init=function(){this._result=Array(this.length)};
n["default"]=f;f.prototype._enumerate=function(){for(var a=this.length,b=this.promise,c=this._input,d=0;b._state===t&&d<a;d++)this._eachEntry(c[d],d)};f.prototype._eachEntry=function(a,b){var c=this._instanceConstructor;k(a)?a.constructor===c&&a._state!==t?(a._onerror=null,this._settledAt(a._state,b,a._result)):this._willSettleAt(c.resolve(a),b):(this._remaining--,this._result[b]=this._makeResult(g,b,a))};f.prototype._settledAt=function(a,b,d){var e=this.promise;e._state===t&&(this._remaining--,this._abortOnReject&&
a===p?h(e,d):this._result[b]=this._makeResult(a,b,d));0===this._remaining&&c(e,this._result)};f.prototype._makeResult=function(a,b,c){return c};f.prototype._willSettleAt=function(a,c){var d=this;b(a,void 0,function(a){d._settledAt(g,c,a)},function(a){d._settledAt(p,c,a)})}});t("rsvp/events",["exports"],function(a){function m(a,l){for(var k=0,d=a.length;k<d;k++)if(a[k]===l)return k;return-1}function n(a){var l=a._promiseCallbacks;l||(l=a._promiseCallbacks={});return l}a["default"]={mixin:function(a){a.on=
this.on;a.off=this.off;a.trigger=this.trigger;a._promiseCallbacks=void 0;return a},on:function(a,l){var k=n(this),d;(d=k[a])||(d=k[a]=[]);-1===m(d,l)&&d.push(l)},off:function(a,l){var k=n(this),d;l?(k=k[a],d=m(k,l),-1!==d&&k.splice(d,1)):k[a]=[]},trigger:function(a,l){var k,d;if(k=n(this)[a])for(var h=0;h<k.length;h++)d=k[h],d(l)}}});t("rsvp/filter",["./promise","./utils","exports"],function(a,m,n){var f=a["default"],l=m.isFunction;n["default"]=function(a,d,h){return f.all(a,h).then(function(a){if(!l(d))throw new TypeError("You must pass a function as filter's second argument.");
for(var b=a.length,g=Array(b),k=0;k<b;k++)g[k]=d(a[k]);return f.all(g,h).then(function(d){for(var f=Array(b),g=0,h=0;h<b;h++)d[h]&&(f[g]=a[h],g++);f.length=g;return f})})}});t("rsvp/hash-settled",["./promise","./enumerator","./promise-hash","./utils","exports"],function(a,m,n,f,l){function k(a,c,b){this._superConstructor(a,c,!1,b)}var d=a["default"];a=m.makeSettledResult;m=m["default"];f=f.o_create;k.prototype=f(n["default"].prototype);k.prototype._superConstructor=m;k.prototype._makeResult=a;k.prototype._validationError=
function(){return Error("hashSettled must be called with an object")};l["default"]=function(a,c){return(new k(d,a,c)).promise}});t("rsvp/hash",["./promise","./promise-hash","./enumerator","exports"],function(a,m,n,f){var l=a["default"],k=m["default"];f["default"]=function(a,f){return(new k(l,a,f)).promise}});t("rsvp/instrument",["./config","./utils","exports"],function(a,m,n){var f=a.config,l=m.now,k=[];n["default"]=function(a,h,c){1===k.push({name:a,payload:{guid:h._guidKey+h._id,eventName:a,detail:h._result,
childGuid:c&&h._guidKey+c._id,label:h._label,timeStamp:l(),stack:Error(h._label).stack}})&&setTimeout(function(){for(var a,c=0;c<k.length;c++)a=k[c],f.trigger(a.name,a.payload);k.length=0},50)}});t("rsvp/map",["./promise","./utils","exports"],function(a,m,n){var f=a["default"],l=m.isFunction;n["default"]=function(a,d,h){return f.all(a,h).then(function(a){if(!l(d))throw new TypeError("You must pass a function as map's second argument.");for(var b=a.length,g=Array(b),k=0;k<b;k++)g[k]=d(a[k]);return f.all(g,
h)})}});t("rsvp/node",["./promise","./utils","exports"],function(a,m,n){var f=a["default"],l=m.isArray;n["default"]=function(a,d){function h(){for(var g=arguments.length,h=Array(g),l=0;l<g;l++)h[l]=arguments[l];var m;!c&&!b&&d?("object"===typeof console&&console.warn('Deprecation: RSVP.denodeify() doesn\'t allow setting the "this" binding anymore. Use yourFunction.bind(yourThis) instead.'),m=d):m=this;return f.all(h).then(function(g){return new f(function(f,e){g.push(function(){for(var a=arguments.length,
g=Array(a),h=0;h<a;h++)g[h]=arguments[h];a=g[0];h=g[1];if(a)e(a);else if(c)f(g.slice(1));else if(b){var a={},g=g.slice(1),k;for(k=0;k<d.length;k++)h=d[k],a[h]=g[k];f(a)}else f(h)});a.apply(m,g)})})}var c=!0===d,b=l(d);h.__proto__=a;return h}});t("rsvp/promise-hash",["./enumerator","./-internal","./utils","exports"],function(a,m,n,f){function l(a,f,c){this._superConstructor(a,f,!0,c)}a=a["default"];var k=m.PENDING;m=n.o_create;f["default"]=l;l.prototype=m(a.prototype);l.prototype._superConstructor=
a;l.prototype._init=function(){this._result={}};l.prototype._validateInput=function(a){return a&&"object"===typeof a};l.prototype._validationError=function(){return Error("Promise.hash must be called with an object")};l.prototype._enumerate=function(){var a=this.promise,f=this._input,c=[],b;for(b in f)a._state===k&&f.hasOwnProperty(b)&&c.push({position:b,entry:f[b]});this._remaining=f=c.length;for(var g=0;a._state===k&&g<f;g++)b=c[g],this._eachEntry(b.entry,b.position)}});t("rsvp/promise","./config ./events ./instrument ./utils ./-internal ./promise/cast ./promise/all ./promise/race ./promise/resolve ./promise/reject exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g){function p(a,b){this._id=A++;this._label=b;this._subscribers=[];t.instrument&&w("created",this);if(q!==a){if(!s(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof p))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");r(this,a)}}var t=a.config,w=n["default"],s=f.isFunction;a=f.now;var q=l.noop,e=l.subscribe,
r=l.initializePromise,v=l.invokeCallback,y=l.FULFILLED;l=k["default"];d=d["default"];h=h["default"];c=c["default"];b=b["default"];a="rsvp_"+a()+"-";var A=0;g["default"]=p;p.cast=l;p.all=d;p.race=h;p.resolve=c;p.reject=b;p.prototype={constructor:p,_id:void 0,_guidKey:a,_label:void 0,_state:void 0,_result:void 0,_subscribers:void 0,_onerror:function(a){t.trigger("error",a)},then:function(a,b,c){this._onerror=null;var d=new this.constructor(q,c),f=this._state,g=this._result;t.instrument&&w("chained",
this,d);f===y&&a?t.async(function(){v(f,d,a,g)}):e(this,d,a,b);return d},"catch":function(a,b){return this.then(null,a,b)},"finally":function(a,b){var c=this.constructor;return this.then(function(b){return c.resolve(a()).then(function(){return b})},function(b){return c.resolve(a()).then(function(){throw b;})},b)}}});t("rsvp/promise/all",["../enumerator","exports"],function(a,m){var n=a["default"];m["default"]=function(a,l){return(new n(this,a,!0,l)).promise}});t("rsvp/promise/cast",["./resolve","exports"],
function(a,m){m["default"]=a["default"]});t("rsvp/promise/race",["../utils","../-internal","exports"],function(a,m,n){var f=a.isArray,l=m.noop,k=m.resolve,d=m.reject,h=m.subscribe,c=m.PENDING;n["default"]=function(a,g){function m(a){k(t,a)}function n(a){d(t,a)}var t=new this(l,g);if(!f(a))return d(t,new TypeError("You must pass an array to race.")),t;for(var s=a.length,q=0;t._state===c&&q<s;q++)h(this.resolve(a[q]),void 0,m,n);return t}});t("rsvp/promise/reject",["../-internal","exports"],function(a,
m){var n=a.noop,f=a.reject;m["default"]=function(a,k){var d=new this(n,k);f(d,a);return d}});t("rsvp/promise/resolve",["../-internal","exports"],function(a,m){var n=a.noop,f=a.resolve;m["default"]=function(a,k){if(a&&"object"===typeof a&&a.constructor===this)return a;var d=new this(n,k);f(d,a);return d}});t("rsvp/race",["./promise","exports"],function(a,m){var n=a["default"];m["default"]=function(a,l){return n.race(a,l)}});t("rsvp/reject",["./promise","exports"],function(a,m){var n=a["default"];m["default"]=
function(a,l){return n.reject(a,l)}});t("rsvp/resolve",["./promise","exports"],function(a,m){var n=a["default"];m["default"]=function(a,l){return n.resolve(a,l)}});t("rsvp/rethrow",["exports"],function(a){a["default"]=function(a){setTimeout(function(){throw a;});throw a;}});t("rsvp/utils",["exports"],function(a){a.objectOrFunction=function(a){return"function"===typeof a||"object"===typeof a&&null!==a};a.isFunction=function(a){return"function"===typeof a};a.isMaybeThenable=function(a){return"object"===
typeof a&&null!==a};a.isArray=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};a.now=Date.now||function(){return(new Date).getTime()};a.o_create=Object.create||function(a){var n=function(){};n.prototype=a;return n}});t("rsvp","./rsvp/promise ./rsvp/events ./rsvp/node ./rsvp/all ./rsvp/all-settled ./rsvp/race ./rsvp/hash ./rsvp/hash-settled ./rsvp/rethrow ./rsvp/defer ./rsvp/config ./rsvp/map ./rsvp/resolve ./rsvp/reject ./rsvp/filter ./rsvp/asap exports".split(" "),
function(a,m,n,f,l,k,d,h,c,b,g,p,t,w,s,q,e){function r(){v.on.apply(v,arguments)}a=a["default"];m=m["default"];n=n["default"];f=f["default"];l=l["default"];k=k["default"];d=d["default"];h=h["default"];c=c["default"];b=b["default"];var v=g.config;g=g.configure;p=p["default"];t=t["default"];w=w["default"];s=s["default"];v.async=q["default"];if("undefined"!==typeof window&&"object"===typeof window.__PROMISE_INSTRUMENTATION__){q=window.__PROMISE_INSTRUMENTATION__;g("instrument",!0);for(var y in q)q.hasOwnProperty(y)&&
r(y,q[y])}e.Promise=a;e.EventTarget=m;e.all=f;e.allSettled=l;e.race=k;e.hash=d;e.hashSettled=h;e.rethrow=c;e.defer=b;e.denodeify=n;e.configure=g;e.on=r;e.off=function(){v.off.apply(v,arguments)};e.resolve=t;e.reject=w;e.async=function(a,b){v.async(a,b)};e.map=p;e.filter=s});S("ember")})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,83 +0,0 @@
var Handlebars=function(){var y=function(){function l(h){this.string=h}l.prototype.toString=function(){return""+this.string};return l}(),v=function(l){function h(a){return b[a]||"&amp;"}var g={},b={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;",'=':'&#x3D;'},a=/[&<>"'`=]/g,c=/[&<>"'`=]/;g.extend=function(a,b){for(var k in b)Object.prototype.hasOwnProperty.call(b,k)&&(a[k]=b[k])};var d=Object.prototype.toString;g.toString=d;var e=function(a){return"function"===typeof a};e(/x/)&&(e=function(a){return"function"===
typeof a&&"[object Function]"===d.call(a)});g.isFunction=e;var x=Array.isArray||function(a){return a&&"object"===typeof a?"[object Array]"===d.call(a):!1};g.isArray=x;g.escapeExpression=function(b){if(b instanceof l)return b.toString();if(!b&&0!==b)return"";b=""+b;return!c.test(b)?b:b.replace(a,h)};g.isEmpty=function(a){return!a&&0!==a?!0:x(a)&&0===a.length?!0:!1};return g}(y),p=function(){function l(g,b){var a;b&&b.firstLine&&(a=b.firstLine,g+=" - "+a+":"+b.firstColumn);for(var c=Error.prototype.constructor.call(this,
g),d=0;d<h.length;d++)this[h[d]]=c[h[d]];a&&(this.lineNumber=a,this.column=b.firstColumn)}var h="description fileName lineNumber message name number stack".split(" ");l.prototype=Error();return l}(),z=function(l,h){function g(a,k){this.helpers=a||{};this.partials=k||{};b(this)}function b(a){a.registerHelper("helperMissing",function(a){if(2!==arguments.length)throw new e("Missing helper: '"+a+"'");});a.registerHelper("blockHelperMissing",function(b,k){var c=k.inverse||function(){},n=k.fn;f(b)&&(b=
b.call(this));return!0===b?n(this):!1===b||null==b?c(this):x(b)?0<b.length?a.helpers.each(b,k):c(this):n(b)});a.registerHelper("each",function(a,b){var k=b.fn,c=b.inverse,e=0,t="",d;f(a)&&(a=a.call(this));b.data&&(d=n(b.data));if(a&&"object"===typeof a)if(x(a))for(var g=a.length;e<g;e++)d&&(d.index=e,d.first=0===e,d.last=e===a.length-1),t+=k(a[e],{data:d});else for(g in a)a.hasOwnProperty(g)&&(d&&(d.key=g,d.index=e,d.first=0===e),t+=k(a[g],{data:d}),e++);0===e&&(t=c(this));return t});a.registerHelper("if",
function(a,b){f(a)&&(a=a.call(this));return!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)});a.registerHelper("unless",function(b,k){return a.helpers["if"].call(this,b,{fn:k.inverse,inverse:k.fn,hash:k.hash})});a.registerHelper("with",function(a,b){f(a)&&(a=a.call(this));if(!d.isEmpty(a))return b.fn(a)});a.registerHelper("log",function(b,k){var c=k.data&&null!=k.data.level?parseInt(k.data.level,10):1;a.log(c,b)})}function a(a,b){k.log(a,b)}var c={},d=l,e=h;c.VERSION="1.3.0";c.COMPILER_REVISION=
4;c.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:">= 1.0.0"};var x=d.isArray,f=d.isFunction,r=d.toString;c.HandlebarsEnvironment=g;g.prototype={constructor:g,logger:k,log:a,registerHelper:function(a,b,k){if("[object Object]"===r.call(a)){if(k||b)throw new e("Arg not supported with multiple helpers");d.extend(this.helpers,a)}else k&&(b.not=k),this.helpers[a]=b},registerPartial:function(a,b){"[object Object]"===r.call(a)?d.extend(this.partials,a):this.partials[a]=b}};var k=
{methodMap:{0:"debug",1:"info",2:"warn",3:"error"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){if(k.level<=a){var c=k.methodMap[a];"undefined"!==typeof console&&console[c]&&console[c].call(console,b)}}};c.logger=k;c.log=a;var n=function(a){var b={};d.extend(b,a);return b};c.createFrame=n;return c}(v,p),A=function(l,h,g){function b(a,b,c){var d=function(a,n){n=n||{};return b(a,n.data||c)};d.program=a;d.depth=0;return d}var a={},c=g.COMPILER_REVISION,d=g.REVISION_CHANGES;a.checkRevision=
function(a){var b=a&&a[0]||1;if(b!==c){if(b<c)throw new h("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d[c]+") or downgrade your runtime to an older version ("+d[b]+").");throw new h("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").");}};a.template=function(a,c){if(!c)throw new h("No environment passed to template");
var d={escapeExpression:l.escapeExpression,invokePartial:function(a,b,n,e,d,f){var g=c.VM.invokePartial.apply(this,arguments);if(null!=g)return g;if(c.compile)return g={helpers:e,partials:d,data:f},d[b]=c.compile(a,{data:void 0!==f},c),d[b](n,g);throw new h("The partial "+b+" could not be compiled when running in runtime-only mode");},programs:[],program:function(a,k,c){var e=this.programs[a];c?e=b(a,k,c):e||(e=this.programs[a]=b(a,k));return e},merge:function(a,b){var c=a||b;a&&(b&&a!==b)&&(c={},
l.extend(c,b),l.extend(c,a));return c},programWithDepth:c.VM.programWithDepth,noop:c.VM.noop,compilerInfo:null};return function(b,k){k=k||{};var n=k.partial?k:c,t,m;k.partial||(t=k.helpers,m=k.partials);n=a.call(d,n,b,t,m,k.data);k.partial||c.VM.checkRevision(d.compilerInfo);return n}};a.programWithDepth=function(a,b,c){var d=Array.prototype.slice.call(arguments,3),k=function(a,k){k=k||{};return b.apply(this,[a,k.data||c].concat(d))};k.program=a;k.depth=d.length;return k};a.program=b;a.invokePartial=
function(a,b,c,d,k,n){d={partial:!0,helpers:d,partials:k,data:n};if(void 0===a)throw new h("The partial "+b+" could not be found");if(a instanceof Function)return a(c,d)};a.noop=function(){return""};return a}(v,p,z),y=function(l,h,g,b,a){var c=function(){var c=new l.HandlebarsEnvironment;b.extend(c,l);c.SafeString=h;c.Exception=g;c.Utils=b;c.VM=a;c.template=function(b){return a.template(b,c)};return c},d=c();d.create=c;return d}(z,y,p,v,A),v=function(l){function h(b){b=b||{};this.firstLine=b.first_line;
this.firstColumn=b.first_column;this.lastColumn=b.last_column;this.lastLine=b.last_line}var g={ProgramNode:function(b,a,c,d){var e;3===arguments.length?(d=c,c=null):2===arguments.length&&(d=a,a=null);h.call(this,d);this.type="program";this.statements=b;this.strip={};c?((e=c[0])?(e={first_line:e.firstLine,last_line:e.lastLine,last_column:e.lastColumn,first_column:e.firstColumn},this.inverse=new g.ProgramNode(c,a,e)):this.inverse=new g.ProgramNode(c,a),this.strip.right=a.left):a&&(this.strip.left=a.right)},
MustacheNode:function(b,a,c,d,e){h.call(this,e);this.type="mustache";this.strip=d;null!=c&&c.charAt?(c=c.charAt(3)||c.charAt(2),this.escaped="{"!==c&&"&"!==c):this.escaped=!!c;this.sexpr=b instanceof g.SexprNode?b:new g.SexprNode(b,a);this.sexpr.isRoot=!0;this.id=this.sexpr.id;this.params=this.sexpr.params;this.hash=this.sexpr.hash;this.eligibleHelper=this.sexpr.eligibleHelper;this.isHelper=this.sexpr.isHelper},SexprNode:function(b,a,c){h.call(this,c);this.type="sexpr";this.hash=a;c=this.id=b[0];
b=this.params=b.slice(1);this.isHelper=(this.eligibleHelper=c.isSimple)&&(b.length||a)},PartialNode:function(b,a,c,d){h.call(this,d);this.type="partial";this.partialName=b;this.context=a;this.strip=c},BlockNode:function(b,a,c,d,e){h.call(this,e);if(b.sexpr.id.original!==d.path.original)throw new l(b.sexpr.id.original+" doesn't match "+d.path.original,this);this.type="block";this.mustache=b;this.program=a;this.inverse=c;this.strip={left:b.strip.left,right:d.strip.right};(a||c).strip.left=b.strip.right;
(c||a).strip.right=d.strip.left;c&&!a&&(this.isInverse=!0)},ContentNode:function(b,a){h.call(this,a);this.type="content";this.string=b},HashNode:function(b,a){h.call(this,a);this.type="hash";this.pairs=b},IdNode:function(b,a){h.call(this,a);this.type="ID";for(var c="",d=[],e=0,g=0,f=b.length;g<f;g++){var r=b[g].part,c=c+((b[g].separator||"")+r);if(".."===r||"."===r||"this"===r){if(0<d.length)throw new l("Invalid path: "+c,this);".."===r?e++:this.isScoped=!0}else d.push(r)}this.original=c;this.parts=
d;this.string=d.join(".");this.depth=e;this.isSimple=1===b.length&&!this.isScoped&&0===e;this.stringModeValue=this.string},PartialNameNode:function(b,a){h.call(this,a);this.type="PARTIAL_NAME";this.name=b.original},DataNode:function(b,a){h.call(this,a);this.type="DATA";this.id=b},StringNode:function(b,a){h.call(this,a);this.type="STRING";this.original=this.string=this.stringModeValue=b},IntegerNode:function(b,a){h.call(this,a);this.type="INTEGER";this.original=this.integer=b;this.stringModeValue=
Number(b)},BooleanNode:function(b,a){h.call(this,a);this.type="BOOLEAN";this.bool=b;this.stringModeValue="true"===b},CommentNode:function(b,a){h.call(this,a);this.type="comment";this.comment=b}};return g}(p),A=function(l,h){var g={};g.parser=l;g.parse=function(b){if(b.constructor===h.ProgramNode)return b;l.yy=h;return l.parse(b)};return g}(function(){return function(){function l(a,b){return{left:"~"===a.charAt(2),right:"~"===b.charAt(0)||"~"===b.charAt(1)}}function h(){this.yy={}}var g={trace:function(){},
yy:{},symbols_:{error:2,root:3,statements:4,EOF:5,program:6,simpleInverse:7,statement:8,openInverse:9,closeBlock:10,openBlock:11,mustache:12,partial:13,CONTENT:14,COMMENT:15,OPEN_BLOCK:16,sexpr:17,CLOSE:18,OPEN_INVERSE:19,OPEN_ENDBLOCK:20,path:21,OPEN:22,OPEN_UNESCAPED:23,CLOSE_UNESCAPED:24,OPEN_PARTIAL:25,partialName:26,partial_option0:27,sexpr_repetition0:28,sexpr_option0:29,dataName:30,param:31,STRING:32,INTEGER:33,BOOLEAN:34,OPEN_SEXPR:35,CLOSE_SEXPR:36,hash:37,hash_repetition_plus0:38,hashSegment:39,
ID:40,EQUALS:41,DATA:42,pathSegments:43,SEP:44,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",32:"STRING",33:"INTEGER",34:"BOOLEAN",35:"OPEN_SEXPR",36:"CLOSE_SEXPR",40:"ID",41:"EQUALS",42:"DATA",44:"SEP"},productions_:[0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,
3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[31,3],[37,1],[39,3],[26,1],[26,1],[26,1],[30,2],[21,1],[43,3],[43,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[38,1],[38,2]],performAction:function(a,b,d,e,g,f,h){a=f.length-1;switch(g){case 1:return new e.ProgramNode(f[a-1],this._$);case 2:return new e.ProgramNode([],this._$);case 3:this.$=new e.ProgramNode([],f[a-1],f[a],this._$);break;case 4:this.$=new e.ProgramNode(f[a-2],f[a-1],f[a],this._$);break;case 5:this.$=new e.ProgramNode(f[a-
1],f[a],[],this._$);break;case 6:this.$=new e.ProgramNode(f[a],this._$);break;case 7:this.$=new e.ProgramNode([],this._$);break;case 8:this.$=new e.ProgramNode([],this._$);break;case 9:this.$=[f[a]];break;case 10:f[a-1].push(f[a]);this.$=f[a-1];break;case 11:this.$=new e.BlockNode(f[a-2],f[a-1].inverse,f[a-1],f[a],this._$);break;case 12:this.$=new e.BlockNode(f[a-2],f[a-1],f[a-1].inverse,f[a],this._$);break;case 13:this.$=f[a];break;case 14:this.$=f[a];break;case 15:this.$=new e.ContentNode(f[a],
this._$);break;case 16:this.$=new e.CommentNode(f[a],this._$);break;case 17:this.$=new e.MustacheNode(f[a-1],null,f[a-2],l(f[a-2],f[a]),this._$);break;case 18:this.$=new e.MustacheNode(f[a-1],null,f[a-2],l(f[a-2],f[a]),this._$);break;case 19:this.$={path:f[a-1],strip:l(f[a-2],f[a])};break;case 20:this.$=new e.MustacheNode(f[a-1],null,f[a-2],l(f[a-2],f[a]),this._$);break;case 21:this.$=new e.MustacheNode(f[a-1],null,f[a-2],l(f[a-2],f[a]),this._$);break;case 22:this.$=new e.PartialNode(f[a-2],f[a-1],
l(f[a-3],f[a]),this._$);break;case 23:this.$=l(f[a-1],f[a]);break;case 24:this.$=new e.SexprNode([f[a-2]].concat(f[a-1]),f[a],this._$);break;case 25:this.$=new e.SexprNode([f[a]],null,this._$);break;case 26:this.$=f[a];break;case 27:this.$=new e.StringNode(f[a],this._$);break;case 28:this.$=new e.IntegerNode(f[a],this._$);break;case 29:this.$=new e.BooleanNode(f[a],this._$);break;case 30:this.$=f[a];break;case 31:f[a-1].isHelper=!0;this.$=f[a-1];break;case 32:this.$=new e.HashNode(f[a],this._$);break;
case 33:this.$=[f[a-2],f[a]];break;case 34:this.$=new e.PartialNameNode(f[a],this._$);break;case 35:this.$=new e.PartialNameNode(new e.StringNode(f[a],this._$),this._$);break;case 36:this.$=new e.PartialNameNode(new e.IntegerNode(f[a],this._$));break;case 37:this.$=new e.DataNode(f[a],this._$);break;case 38:this.$=new e.IdNode(f[a],this._$);break;case 39:f[a-2].push({part:f[a],separator:f[a-1]});this.$=f[a-2];break;case 40:this.$=[{part:f[a]}];break;case 43:this.$=[];break;case 44:f[a-1].push(f[a]);
break;case 47:this.$=[f[a]];break;case 48:f[a-1].push(f[a])}},table:[{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},
{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,
40:[1,28],42:[1,27],43:26},{17:29,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:30,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:31,21:24,30:25,40:[1,28],42:[1,27],43:26},{21:33,26:32,32:[1,34],33:[1,35],40:[1,28],43:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],
19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,40:[1,28],42:[1,27],43:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,43],24:[2,43],28:43,32:[2,43],33:[2,43],34:[2,43],35:[2,43],36:[2,43],40:[2,43],42:[2,43]},{18:[2,25],24:[2,25],36:[2,25]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],35:[2,38],36:[2,38],40:[2,38],42:[2,38],44:[1,44]},{21:45,40:[1,28],43:26},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],42:[2,40],44:[2,40]},{18:[1,
46]},{18:[1,47]},{24:[1,48]},{18:[2,41],21:50,27:49,40:[1,28],43:26},{18:[2,34],40:[2,34]},{18:[2,35],40:[2,35]},{18:[2,36],40:[2,36]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,40:[1,28],43:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],
20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,45],21:56,24:[2,45],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:[1,61],36:[2,45],37:55,38:62,39:63,40:[1,64],42:[1,27],43:26},{40:[1,65]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],35:[2,37],36:[2,37],40:[2,37],42:[2,37]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,
17],22:[2,17],23:[2,17],25:[2,17]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,66]},{18:[2,42]},{18:[1,67]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24],36:[2,24]},{18:[2,44],24:[2,44],32:[2,44],33:[2,44],34:[2,44],35:[2,44],36:[2,44],40:[2,44],42:[2,44]},{18:[2,46],24:[2,46],
36:[2,46]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],35:[2,26],36:[2,26],40:[2,26],42:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],35:[2,27],36:[2,27],40:[2,27],42:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],35:[2,28],36:[2,28],40:[2,28],42:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],35:[2,29],36:[2,29],40:[2,29],42:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],35:[2,30],36:[2,30],40:[2,30],42:[2,30]},{17:68,21:24,30:25,40:[1,28],42:[1,
27],43:26},{18:[2,32],24:[2,32],36:[2,32],39:69,40:[1,70]},{18:[2,47],24:[2,47],36:[2,47],40:[2,47]},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],41:[1,71],42:[2,40],44:[2,40]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],35:[2,39],36:[2,39],40:[2,39],42:[2,39],44:[2,39]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{36:[1,
72]},{18:[2,48],24:[2,48],36:[2,48],40:[2,48]},{41:[1,71]},{21:56,30:60,31:73,32:[1,57],33:[1,58],34:[1,59],35:[1,61],40:[1,28],42:[1,27],43:26},{18:[2,31],24:[2,31],32:[2,31],33:[2,31],34:[2,31],35:[2,31],36:[2,31],40:[2,31],42:[2,31]},{18:[2,33],24:[2,33],36:[2,33],40:[2,33]}],defaultActions:{3:[2,2],16:[2,1],50:[2,42]},parseError:function(a,b){throw Error(a);},parse:function(a){var b=[0],d=[null],e=[],g=this.table,f="",h=0,k=0,n=0;this.lexer.setInput(a);this.lexer.yy=this.yy;this.yy.lexer=this.lexer;
this.yy.parser=this;"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});a=this.lexer.yylloc;e.push(a);var t=this.lexer.options&&this.lexer.options.ranges;"function"===typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var m,l,u,q,w={},p,s;;){u=b[b.length-1];if(this.defaultActions[u])q=this.defaultActions[u];else{if(null===m||"undefined"==typeof m)m=void 0,m=this.lexer.lex()||1,"number"!==typeof m&&(m=this.symbols_[m]||m);q=g[u]&&g[u][m]}if("undefined"===typeof q||!q.length||
!q[0]){var v="";if(!n){s=[];for(p in g[u])this.terminals_[p]&&2<p&&s.push("'"+this.terminals_[p]+"'");v=this.lexer.showPosition?"Parse error on line "+(h+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+s.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(h+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'");this.parseError(v,{text:this.lexer.match,token:this.terminals_[m]||m,line:this.lexer.yylineno,loc:a,expected:s})}}if(q[0]instanceof Array&&1<q.length)throw Error("Parse Error: multiple actions possible at state: "+
u+", token: "+m);switch(q[0]){case 1:b.push(m);d.push(this.lexer.yytext);e.push(this.lexer.yylloc);b.push(q[1]);m=null;l?(m=l,l=null):(k=this.lexer.yyleng,f=this.lexer.yytext,h=this.lexer.yylineno,a=this.lexer.yylloc,0<n&&n--);break;case 2:s=this.productions_[q[1]][1];w.$=d[d.length-s];w._$={first_line:e[e.length-(s||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(s||1)].first_column,last_column:e[e.length-1].last_column};t&&(w._$.range=[e[e.length-(s||1)].range[0],e[e.length-
1].range[1]]);u=this.performAction.call(w,f,k,h,this.yy,q[1],d,e);if("undefined"!==typeof u)return u;s&&(b=b.slice(0,-2*s),d=d.slice(0,-1*s),e=e.slice(0,-1*s));b.push(this.productions_[q[1]][0]);d.push(w.$);e.push(w._$);q=g[b[b.length-2]][b[b.length-1]];b.push(q);break;case 3:return!0}}return!0}},b=function(){return{EOF:1,parseError:function(a,b){if(this.yy.parser)this.yy.parser.parseError(a,b);else throw Error(a);},setInput:function(a){this._input=a;this._more=this._less=this.done=!1;this.yylineno=
this.yyleng=0;this.yytext=this.matched=this.match="";this.conditionStack=["INITIAL"];this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};this.options.ranges&&(this.yylloc.range=[0,0]);this.offset=0;return this},input:function(){var a=this._input[0];this.yytext+=a;this.yyleng++;this.offset++;this.match+=a;this.matched+=a;a.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++;this.options.ranges&&this.yylloc.range[1]++;this._input=this._input.slice(1);
return a},unput:function(a){var b=a.length,d=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input;this.yytext=this.yytext.substr(0,this.yytext.length-b-1);this.offset-=b;a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1);this.matched=this.matched.substr(0,this.matched.length-1);d.length-1&&(this.yylineno-=d.length-1);var e=this.yylloc.range;this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?
(d.length===a.length?this.yylloc.first_column:0)+a[a.length-d.length].length-d[0].length:this.yylloc.first_column-b};this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]);return this},more:function(){this._more=!0;return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(20<a.length?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;20>a.length&&(a+=this._input.substr(0,
20-a.length));return(a.substr(0,20)+(20<a.length?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,d;this._more||(this.match=this.yytext="");for(var e=this._currentRules(),g=0;g<e.length;g++)if((b=this._input.match(this.rules[e[g]]))&&(!a||b[0].length>a[0].length))if(a=b,d=g,!this.options.flex)break;if(a){if(b=a[0].match(/(?:\r\n?|\n).*/g))this.yylineno+=
b.length;this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:b?b[b.length-1].length-b[b.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+a[0].length};this.yytext+=a[0];this.match+=a[0];this.matches=a;this.yyleng=this.yytext.length;this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]);this._more=!1;this._input=this._input.slice(a[0].length);this.matched+=a[0];a=this.performAction.call(this,this.yy,
this,e[d],this.conditionStack[this.conditionStack.length-1]);this.done&&this._input&&(this.done=!1);if(a)return a}else return""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!==typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-
1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)},options:{},performAction:function(a,b,d,e){function g(a,d){return b.yytext=b.yytext.substr(a,b.yyleng-d)}switch(d){case 0:"\\\\"===b.yytext.slice(-2)?(g(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(g(0,1),this.begin("emu")):this.begin("mu");if(b.yytext)return 14;break;case 1:return 14;case 2:return this.popState(),14;case 3:return g(0,4),this.popState(),15;case 4:return 35;
case 5:return 36;case 6:return 25;case 7:return 16;case 8:return 20;case 9:return 19;case 10:return 19;case 11:return 23;case 12:return 22;case 13:this.popState();this.begin("com");break;case 14:return g(3,5),this.popState(),15;case 15:return 22;case 16:return 41;case 17:return 40;case 18:return 40;case 19:return 44;case 21:return this.popState(),24;case 22:return this.popState(),18;case 23:return b.yytext=g(1,2).replace(/\\"/g,'"'),32;case 24:return b.yytext=g(1,2).replace(/\\'/g,"'"),32;case 25:return 42;
case 26:return 34;case 27:return 34;case 28:return 33;case 29:return 40;case 30:return b.yytext=g(1,2),40;case 31:return"INVALID";case 32:return 5}},rules:[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)])))/,
/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?=([~}\s)])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/],conditions:{mu:{rules:[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[3],inclusive:!1},INITIAL:{rules:[0,1,32],inclusive:!0}}}}();
g.lexer=b;h.prototype=g;g.Parser=h;return new h}()}(),v),B=function(l){function h(){}var g={};g.Compiler=h;h.prototype={compiler:h,disassemble:function(){for(var b=this.opcodes,a,c=[],d,e,g=0,f=b.length;g<f;g++)if(a=b[g],"DECLARE"===a.opcode)c.push("DECLARE "+a.name+"="+a.value);else{d=[];for(var h=0;h<a.args.length;h++)e=a.args[h],"string"===typeof e&&(e='"'+e.replace("\n","\\n")+'"'),d.push(e);c.push(a.opcode+" "+d.join(" "))}return c.join("\n")},equals:function(b){var a=this.opcodes.length;if(b.opcodes.length!==
a)return!1;for(var c=0;c<a;c++){var d=this.opcodes[c],e=b.opcodes[c];if(d.opcode!==e.opcode||d.args.length!==e.args.length)return!1;for(var g=0;g<d.args.length;g++)if(d.args[g]!==e.args[g])return!1}a=this.children.length;if(b.children.length!==a)return!1;for(c=0;c<a;c++)if(!this.children[c].equals(b.children[c]))return!1;return!0},guid:0,compile:function(b,a){this.opcodes=[];this.children=[];this.depths={list:[]};this.options=a;var c=this.options.knownHelpers;this.options.knownHelpers={helperMissing:!0,
blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0};if(c)for(var d in c)this.options.knownHelpers[d]=c[d];return this.accept(b)},accept:function(b){var a=b.strip||{};a.left&&this.opcode("strip");b=this[b.type](b);a.right&&this.opcode("strip");return b},program:function(b){b=b.statements;for(var a=0,c=b.length;a<c;a++)this.accept(b[a]);this.isSimple=1===c;this.depths.list=this.depths.list.sort(function(a,b){return a-b});return this},compileProgram:function(b){b=(new this.compiler).compile(b,
this.options);var a=this.guid++,c;this.usePartial=this.usePartial||b.usePartial;this.children[a]=b;for(var d=0,e=b.depths.list.length;d<e;d++)c=b.depths.list[d],2>c||this.addDepth(c-1);return a},block:function(b){var a=b.mustache,c=b.program;b=b.inverse;c&&(c=this.compileProgram(c));b&&(b=this.compileProgram(b));var a=a.sexpr,d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,c,b):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",c),this.opcode("pushProgram",b),this.opcode("emptyHash"),
this.opcode("blockValue")):(this.ambiguousSexpr(a,c,b),this.opcode("pushProgram",c),this.opcode("pushProgram",b),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue"));this.opcode("append")},hash:function(b){b=b.pairs;var a,c;this.opcode("pushHash");for(var d=0,e=b.length;d<e;d++)a=b[d],c=a[1],this.options.stringParams?(c.depth&&this.addDepth(c.depth),this.opcode("getContext",c.depth||0),this.opcode("pushStringParam",c.stringModeValue,c.type),"sexpr"===c.type&&this.sexpr(c)):this.accept(c),
this.opcode("assignToHash",a[0]);this.opcode("popHash")},partial:function(b){var a=b.partialName;this.usePartial=!0;b.context?this.ID(b.context):this.opcode("push","depth0");this.opcode("invokePartial",a.name);this.opcode("append")},content:function(b){this.opcode("appendContent",b.string)},mustache:function(b){this.sexpr(b.sexpr);b.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},ambiguousSexpr:function(b,a,c){b=b.id;var d=b.parts[0],e=null!=a||null!=c;this.opcode("getContext",
b.depth);this.opcode("pushProgram",a);this.opcode("pushProgram",c);this.opcode("invokeAmbiguous",d,e)},simpleSexpr:function(b){b=b.id;"DATA"===b.type?this.DATA(b):b.parts.length?this.ID(b):(this.addDepth(b.depth),this.opcode("getContext",b.depth),this.opcode("pushContext"));this.opcode("resolvePossibleLambda")},helperSexpr:function(b,a,c){a=this.setupFullMustacheParams(b,a,c);c=b.id.parts[0];if(this.options.knownHelpers[c])this.opcode("invokeKnownHelper",a.length,c);else{if(this.options.knownHelpersOnly)throw new l("You specified knownHelpersOnly, but used the unknown helper "+
c,b);this.opcode("invokeHelper",a.length,c,b.isRoot)}},sexpr:function(b){var a=this.classifySexpr(b);"simple"===a?this.simpleSexpr(b):"helper"===a?this.helperSexpr(b):this.ambiguousSexpr(b)},ID:function(b){this.addDepth(b.depth);this.opcode("getContext",b.depth);b.parts[0]?this.opcode("lookupOnContext",b.parts[0]):this.opcode("pushContext");for(var a=1,c=b.parts.length;a<c;a++)this.opcode("lookup",b.parts[a])},DATA:function(b){this.options.data=!0;if(b.id.isScoped||b.id.depth)throw new l("Scoped data references are not supported: "+
b.original,b);this.opcode("lookupData");b=b.id.parts;for(var a=0,c=b.length;a<c;a++)this.opcode("lookup",b[a])},STRING:function(b){this.opcode("pushString",b.string)},INTEGER:function(b){this.opcode("pushLiteral",b.integer)},BOOLEAN:function(b){this.opcode("pushLiteral",b.bool)},comment:function(){},opcode:function(b){this.opcodes.push({opcode:b,args:[].slice.call(arguments,1)})},declare:function(b,a){this.opcodes.push({opcode:"DECLARE",name:b,value:a})},addDepth:function(b){0!==b&&!this.depths[b]&&
(this.depths[b]=!0,this.depths.list.push(b))},classifySexpr:function(b){var a=b.isHelper,c=b.eligibleHelper,d=this.options;c&&!a&&(d.knownHelpers[b.id.parts[0]]?a=!0:d.knownHelpersOnly&&(c=!1));return a?"helper":c?"ambiguous":"simple"},pushParams:function(b){for(var a=b.length,c;a--;)if(c=b[a],this.options.stringParams)c.depth&&this.addDepth(c.depth),this.opcode("getContext",c.depth||0),this.opcode("pushStringParam",c.stringModeValue,c.type),"sexpr"===c.type&&this.sexpr(c);else this[c.type](c)},setupFullMustacheParams:function(b,
a,c){var d=b.params;this.pushParams(d);this.opcode("pushProgram",a);this.opcode("pushProgram",c);b.hash?this.hash(b.hash):this.opcode("emptyHash");return d}};g.precompile=function(b,a,c){if(null==b||"string"!==typeof b&&b.constructor!==c.AST.ProgramNode)throw new l("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+b);a=a||{};"data"in a||(a.data=!0);b=c.parse(b);b=(new c.Compiler).compile(b,a);return(new c.JavaScriptCompiler).compile(b,a)};g.compile=function(b,a,c){if(null==
b||"string"!==typeof b&&b.constructor!==c.AST.ProgramNode)throw new l("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+b);a=a||{};"data"in a||(a.data=!0);var d;return function(e,g){if(!d){var f=c.parse(b),f=(new c.Compiler).compile(f,a),f=(new c.JavaScriptCompiler).compile(f,a,void 0,!0);d=c.template(f)}return d.call(this,e,g)}};return g}(p),p=function(l,h){function g(a){this.value=a}function b(){}var a=l.COMPILER_REVISION,c=l.REVISION_CHANGES,d=l.log;b.prototype={nameLookup:function(a,
c){var d,e;0===a.indexOf("depth")&&(d=!0);e=/^[0-9]+$/.test(c)?a+"["+c+"]":b.isValidJavaScriptVariableName(c)?a+"."+c:a+"['"+c+"']";return d?"("+a+" && "+e+")":e},compilerInfo:function(){return"this.compilerInfo = ["+a+",'"+c[a]+"'];\n"},appendToBuffer:function(a){return this.environment.isSimple?"return "+a+";":{appendToBuffer:!0,content:a,toString:function(){return"buffer += "+a+";"}}},initializeBuffer:function(){return this.quotedString("")},namespace:"Handlebars",compile:function(a,b,c,e){this.environment=
a;this.options=b||{};d("debug",this.environment.disassemble()+"\n\n");this.name=this.environment.name;this.isChild=!!c;this.context=c||{programs:[],environments:[],aliases:{}};this.preamble();this.stackSlot=0;this.stackVars=[];this.registers={list:[]};this.hashes=[];this.compileStack=[];this.inlineStack=[];this.compileChildren(a,b);a=a.opcodes;this.i=0;for(c=a.length;this.i<c;this.i++)b=a[this.i],"DECLARE"===b.opcode?this[b.name]=b.value:this[b.opcode].apply(this,b.args),b.opcode!==this.stripNext&&
(this.stripNext=!1);this.pushSource("");if(this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new h("Compile completed with content left on stack");return this.createFunctionContext(e)},preamble:function(){var a=[];if(this.isChild)a.push("");else{var b=this.namespace,c="helpers = this.merge(helpers, "+b+".helpers);";this.environment.usePartial&&(c=c+" partials = this.merge(partials, "+b+".partials);");this.options.data&&(c+=" data = data || {};");a.push(c)}this.environment.isSimple?
a.push(""):a.push(", buffer = "+this.initializeBuffer());this.lastContext=0;this.source=a},createFunctionContext:function(a){var b=this.stackVars.concat(this.registers.list);0<b.length&&(this.source[1]=this.source[1]+", "+b.join(", "));if(!this.isChild)for(var c in this.context.aliases)this.context.aliases.hasOwnProperty(c)&&(this.source[1]=this.source[1]+", "+c+"="+this.context.aliases[c]);this.source[1]&&(this.source[1]="var "+this.source[1].substring(2)+";");this.isChild||(this.source[1]+="\n"+
this.context.programs.join("\n")+"\n");this.environment.isSimple||this.pushSource("return buffer;");b=this.isChild?["depth0","data"]:["Handlebars","depth0","helpers","partials","data"];c=0;for(var e=this.environment.depths.list.length;c<e;c++)b.push("depth"+this.environment.depths.list[c]);c=this.mergeSource();this.isChild||(c=this.compilerInfo()+c);if(a)return b.push(c),Function.apply(this,b);a="function "+(this.name||"")+"("+b.join(",")+") {\n "+c+"}";d("debug",a+"\n\n");return a},mergeSource:function(){for(var a=
"",b,c=0,d=this.source.length;c<d;c++){var e=this.source[c];e.appendToBuffer?b=b?b+"\n + "+e.content:e.content:(b&&(a+="buffer += "+b+";\n ",b=void 0),a+=e+"\n ")}return a},blockValue:function(){this.context.aliases.blockHelperMissing="helpers.blockHelperMissing";var a=["depth0"];this.setupParams(0,a);this.replaceStack(function(b){a.splice(1,0,b);return"blockHelperMissing.call("+a.join(", ")+")"})},ambiguousBlockValue:function(){this.context.aliases.blockHelperMissing="helpers.blockHelperMissing";
var a=["depth0"];this.setupParams(0,a);var b=this.topStack();a.splice(1,0,b);this.pushSource("if (!"+this.lastHelper+") { "+b+" = blockHelperMissing.call("+a.join(", ")+"); }")},appendContent:function(a){this.pendingContent&&(a=this.pendingContent+a);this.stripNext&&(a=a.replace(/^\s+/,""));this.pendingContent=a},strip:function(){this.pendingContent&&(this.pendingContent=this.pendingContent.replace(/\s+$/,""));this.stripNext="strip"},append:function(){this.flushInline();var a=this.popStack();this.pushSource("if("+
a+" || "+a+" === 0) { "+this.appendToBuffer(a)+" }");this.environment.isSimple&&this.pushSource("else { "+this.appendToBuffer("''")+" }")},appendEscaped:function(){this.context.aliases.escapeExpression="this.escapeExpression";this.pushSource(this.appendToBuffer("escapeExpression("+this.popStack()+")"))},getContext:function(a){this.lastContext!==a&&(this.lastContext=a)},lookupOnContext:function(a){this.push(this.nameLookup("depth"+this.lastContext,a,"context"))},pushContext:function(){this.pushStackLiteral("depth"+
this.lastContext)},resolvePossibleLambda:function(){this.context.aliases.functionType='"function"';this.replaceStack(function(a){return"typeof "+a+" === functionType ? "+a+".apply(depth0) : "+a})},lookup:function(a){this.replaceStack(function(b){return b+" == null || "+b+" === false ? "+b+" : "+this.nameLookup(b,a,"context")})},lookupData:function(){this.pushStackLiteral("data")},pushStringParam:function(a,b){this.pushStackLiteral("depth"+this.lastContext);this.pushString(b);"sexpr"!==b&&("string"===
typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(){this.pushStackLiteral("{}");this.options.stringParams&&(this.push("{}"),this.push("{}"))},pushHash:function(){this.hash&&this.hashes.push(this.hash);this.hash={values:[],types:[],contexts:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop();this.options.stringParams&&(this.push("{"+a.contexts.join(",")+"}"),this.push("{"+a.types.join(",")+"}"));this.push("{\n "+a.values.join(",\n ")+"\n }")},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},
push:function(a){this.inlineStack.push(a);return a},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},invokeHelper:function(a,b,c){this.context.aliases.helperMissing="helpers.helperMissing";this.useRegister("helper");a=this.lastHelper=this.setupHelper(a,b,!0);b=this.nameLookup("depth"+this.lastContext,b,"context");b="helper = "+a.name+" || "+b;a.paramsInit&&(b+=","+a.paramsInit);this.push("("+
b+",helper ? helper.call("+a.callParams+") : helperMissing.call("+a.helperMissingParams+"))");c||this.flushInline()},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(c.name+".call("+c.callParams+")")},invokeAmbiguous:function(a,b){this.context.aliases.functionType='"function"';this.useRegister("helper");this.emptyHash();var c=this.setupHelper(0,a,b),d=this.lastHelper=this.nameLookup("helpers",a,"helper"),e=this.nameLookup("depth"+this.lastContext,a,"context"),f=this.nextStack();
c.paramsInit&&this.pushSource(c.paramsInit);this.pushSource("if (helper = "+d+") { "+f+" = helper.call("+c.callParams+"); }");this.pushSource("else { helper = "+e+"; "+f+" = typeof helper === functionType ? helper.call("+c.callParams+") : helper; }")},invokePartial:function(a){a=[this.nameLookup("partials",a,"partial"),"'"+a+"'",this.popStack(),"helpers","partials"];this.options.data&&a.push("data");this.context.aliases.self="this";this.push("self.invokePartial("+a.join(", ")+")")},assignToHash:function(a){var b=
this.popStack(),c,d;this.options.stringParams&&(d=this.popStack(),c=this.popStack());var e=this.hash;c&&e.contexts.push("'"+a+"': "+c);d&&e.types.push("'"+a+"': "+d);e.values.push("'"+a+"': ("+b+")")},compiler:b,compileChildren:function(a,b){for(var c=a.children,d,e,f=0,g=c.length;f<g;f++){d=c[f];e=new this.compiler;var h=this.matchExistingProgram(d);null==h?(this.context.programs.push(""),h=this.context.programs.length,d.index=h,d.name="program"+h,this.context.programs[h]=e.compile(d,b,this.context),
this.context.environments[h]=d):(d.index=h,d.name="program"+h)}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return b}},programExpression:function(a){this.context.aliases.self="this";if(null==a)return"self.noop";var b=this.environment.children[a];a=b.depths.list;for(var c=[b.index,b.name,"data"],d=0,e=a.length;d<e;d++)b=a[d],1===b?c.push("depth0"):c.push("depth"+(b-1));return(0===a.length?"self.program(":
"self.programWithDepth(")+c.join(", ")+")"},register:function(a,b){this.useRegister(a);this.pushSource(a+" = "+b+";")},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},pushStackLiteral:function(a){return this.push(new g(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent))),this.pendingContent=void 0);a&&this.source.push(a)},pushStack:function(a){this.flushInline();var b=this.incrStack();
a&&this.pushSource(b+" = "+a+";");this.compileStack.push(b);return b},replaceStack:function(a){var b="",c=this.isInline(),d,e,f;c?(d=this.popStack(!0),d instanceof g?(d=d.value,f=!0):(e=!this.stackSlot,b=!e?this.topStackName():this.incrStack(),b="("+this.push(b)+" = "+d+"),",d=this.topStack())):d=this.topStack();a=a.call(this,d);c?(f||this.popStack(),e&&this.stackSlot--,this.push("("+b+a+")")):(/^stack/.test(d)||(d=this.nextStack()),this.pushSource(d+" = ("+b+a+");"));return d},nextStack:function(){return this.pushStack()},
incrStack:function(){this.stackSlot++;this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot);return this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;if(a.length){this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var d=a[b];d instanceof g?this.compileStack.push(d):this.pushStack(d)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:
this.compileStack).pop();if(!a&&c instanceof g)return c.value;if(!b){if(!this.stackSlot)throw new h("Invalid stack pop");this.stackSlot--}return c},topStack:function(a){var b=this.isInline()?this.inlineStack:this.compileStack,b=b[b.length-1];return!a&&b instanceof g?b.value:b},quotedString:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},setupHelper:function(a,b,c){var d=[];a=
this.setupParams(a,d,c);var e=this.nameLookup("helpers",b,"helper");return{params:d,paramsInit:a,name:e,callParams:["depth0"].concat(d).join(", "),helperMissingParams:c&&["depth0",this.quotedString(b)].concat(d).join(", ")}},setupOptions:function(a,b){var c=[],d=[],e=[],f,g;c.push("hash:"+this.popStack());this.options.stringParams&&(c.push("hashTypes:"+this.popStack()),c.push("hashContexts:"+this.popStack()));f=this.popStack();if((g=this.popStack())||f)g||(this.context.aliases.self="this",g="self.noop"),
f||(this.context.aliases.self="this",f="self.noop"),c.push("inverse:"+f),c.push("fn:"+g);for(g=0;g<a;g++)f=this.popStack(),b.push(f),this.options.stringParams&&(e.push(this.popStack()),d.push(this.popStack()));this.options.stringParams&&(c.push("contexts:["+d.join(",")+"]"),c.push("types:["+e.join(",")+"]"));this.options.data&&c.push("data:data");return c},setupParams:function(a,b,c){a="{"+this.setupOptions(a,b).join(",")+"}";if(c)return this.useRegister("options"),b.push("options"),"options="+a;
b.push(a);return""}};for(var e="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield".split(" "),p=b.RESERVED_WORDS={},f=0,r=e.length;f<r;f++)p[e[f]]=!0;b.isValidJavaScriptVariableName=
function(a){return!b.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)?!0:!1};return b}(z,p);return function(l,h,g,b,a){var c=g.parser,d=g.parse,e=b.Compiler,p=b.compile,f=b.precompile,r=l.create;g=function(){var b=r();b.compile=function(a,c){return p(a,c,b)};b.precompile=function(a,c){return f(a,c,b)};b.AST=h;b.Compiler=e;b.JavaScriptCompiler=a;b.Parser=c;b.parse=d;return b};l=g();l.create=g;return l}(y,v,A,B,p)}();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,146 +0,0 @@
/**
* notificationFx.js v1.0.0
* http://www.codrops.com
*
* Licensed under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*
* Copyright 2014, Codrops
* http://www.codrops.com
*/
;( function( window ) {
'use strict';
var docElem = window.document.documentElement,
// animation end event name
animEndEventName = "webkitAnimationEnd";
/**
* extend obj function
*/
function extend( a, b ) {
for( var key in b ) {
if( b.hasOwnProperty( key ) ) {
a[key] = b[key];
}
}
return a;
}
/**
* NotificationFx function
*/
function NotificationFx( options ) {
this.options = extend( {}, this.options );
extend( this.options, options );
this._init();
}
/**
* NotificationFx options
*/
NotificationFx.prototype.options = {
// element to which the notification will be appended
// defaults to the document.body
wrapper : document.body,
// the message
message : 'yo!',
// layout type: growl|attached|bar|other
layout : 'growl',
// effects for the specified layout:
// for growl layout: scale|slide|genie|jelly
// for attached layout: flip|bouncyflip
// for other layout: boxspinner|cornerexpand|loadingcircle|thumbslider
// ...
effect : 'slide',
// notice, warning, error, success
// will add class ns-type-warning, ns-type-error or ns-type-success
type : 'error',
// if the user doesn´t close the notification then we remove it
// after the following time
ttl : 6000,
// callbacks
onClose : function() { return false; },
onOpen : function() { return false; }
};
/**
* init function
* initialize and cache some vars
*/
NotificationFx.prototype._init = function() {
// create HTML structure
this.ntf = document.createElement( 'div' );
this.ntf.className = 'ns-box ns-' + this.options.layout + ' ns-effect-' + this.options.effect + ' ns-type-' + this.options.type;
var strinner = '<div class="ns-box-inner">';
strinner += this.options.message;
strinner += '</div>';
strinner += '<span class="ns-close"></span></div>';
this.ntf.innerHTML = strinner;
// append to body or the element specified in options.wrapper
this.options.wrapper.insertBefore( this.ntf, this.options.wrapper.firstChild );
// dismiss after [options.ttl]ms
var self = this;
this.dismissttl = setTimeout( function() {
if( self.active ) {
self.dismiss();
}
}, this.options.ttl );
// init events
this._initEvents();
};
/**
* init events
*/
NotificationFx.prototype._initEvents = function() {
var self = this;
// dismiss notification
this.ntf.querySelector( '.ns-close' ).addEventListener( 'click', function() { self.dismiss(); } );
};
/**
* show the notification
*/
NotificationFx.prototype.show = function() {
this.active = true;
classie.remove( this.ntf, 'ns-hide' );
classie.add( this.ntf, 'ns-show' );
this.options.onOpen();
};
/**
* dismiss the notification
*/
NotificationFx.prototype.dismiss = function() {
var self = this;
this.active = false;
clearTimeout( this.dismissttl );
classie.remove( this.ntf, 'ns-show' );
setTimeout( function() {
classie.add( self.ntf, 'ns-hide' );
// callback
self.options.onClose();
}, 25 );
// after animation ends remove ntf from the DOM
var onEndAnimationFn = function( ev ) {
if( ev.target !== self.ntf ) return false;
this.removeEventListener( animEndEventName, onEndAnimationFn );
self.options.wrapper.removeChild( this );
};
this.ntf.addEventListener( animEndEventName, onEndAnimationFn );
};
/**
* add to global namespace
*/
window.NotificationFx = NotificationFx;
} )( window );

View File

@ -1,37 +0,0 @@
require 'uglifier'
File.open("static/application.min.js", "w") {|file| file.truncate(0) }
libs = [
"javascripts/libs/jquery-1.10.2.min.js",
"javascripts/libs/handlebars-1.3.0.min.js",
"javascripts/libs/ember.min.js",
"javascripts/libs/base64.min.js",
"javascripts/libs/ember-validations.min.js",
"javascripts/libs/list-view.min.js",
"javascripts/libs/classie.js",
"javascripts/libs/notificationFx.js",
]
app = [
"javascripts/app/router.js",
"javascripts/app/models.js",
"javascripts/app/routes.js",
"javascripts/app/controllers.js",
"javascripts/app/views.js",
"javascripts/app/helpers.js",
]
libs.each do |js_file|
File.open("static/application.min.js", "a") do |f|
puts "cat #{js_file}"
f << File.read(js_file)
end
end
app.each do |js_file|
File.open("static/application.min.js", "a") do |f|
puts "compile #{js_file}"
f << Uglifier.compile(File.read(js_file))
end
end

View File

@ -1,37 +0,0 @@
#!/usr/bin/env bash
set -e
# Get the parent directory of where this script is.
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )"
# Change into that directory
cd "$DIR"
# Generate the tag
DEPLOY="../pkg/web_ui/v1"
rm -rf $DEPLOY
mkdir -p $DEPLOY
bundle check >/dev/null 2>&1 || bundle install
bundle exec sass styles/base.scss static/base.css
bundle exec ruby scripts/compile.rb
# Copy into deploy
shopt -s dotglob
cp -r $DIR/static $DEPLOY/
cp index.html $DEPLOY/
# Magic scripting
sed -E -e "/ASSETS/,/\/ASSETS/ d" -ibak $DEPLOY/index.html
sed -E -e "s#<\/body>#<script src=\"static/application.min.js\"></script></body>#" -ibak $DEPLOY/index.html
# Remove the backup file from sed
rm $DEPLOY/index.htmlbak
# pushd $(dirname $DEPLOY) >/dev/null 2>&1
# zip -r ../web_ui.zip ./*
# popd >/dev/null 2>&1

BIN
ui/static/android-chrome-192x192.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/android-chrome-512x512.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-114x114.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-120x120.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-144x144.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-152x152.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-57x57.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-60x60.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-72x72.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon-76x76.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/apple-touch-icon.png (Stored with Git LFS)

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
ui/static/consul-logo.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon-128.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon-16x16.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon-196x196.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon-32x32.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon-96x96.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon.ico (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/favicon.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 14 32 18" width="32" height="4" fill="#d68ab2" preserveAspectRatio="none">
<path opacity="0.8" transform="translate(0 0)" d="M2 14 V18 H6 V14z">
<animateTransform attributeName="transform" type="translate" values="0 0; 24 0; 0 0" dur="2s" begin="0" repeatCount="indefinite" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
</path>
<path opacity="0.5" transform="translate(0 0)" d="M0 14 V18 H8 V14z">
<animateTransform attributeName="transform" type="translate" values="0 0; 24 0; 0 0" dur="2s" begin="0.1s" repeatCount="indefinite" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
</path>
<path opacity="0.25" transform="translate(0 0)" d="M0 14 V18 H8 V14z">
<animateTransform attributeName="transform" type="translate" values="0 0; 24 0; 0 0" dur="2s" begin="0.2s" repeatCount="indefinite" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
</path>
</svg>

Before

Width:  |  Height:  |  Size: 983 B

BIN
ui/static/mstile-144x144.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/mstile-150x150.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/mstile-310x150.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/mstile-310x310.png (Stored with Git LFS)

Binary file not shown.

BIN
ui/static/mstile-70x70.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,61 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,16.000000) scale(0.003030,-0.003030)"
fill="#000000" stroke="none">
<path d="M2457 5024 c-1 -1 -40 -5 -87 -8 -47 -3 -94 -8 -105 -10 -11 -2 -42
-7 -70 -10 -27 -4 -57 -9 -65 -11 -8 -2 -26 -6 -40 -9 -55 -9 -198 -46 -240
-61 -25 -9 -52 -18 -60 -20 -93 -21 -379 -160 -514 -249 -55 -36 -103 -66
-107 -66 -4 0 -9 -3 -11 -7 -1 -5 -37 -35 -78 -67 -100 -80 -239 -212 -307
-293 -10 -12 -26 -31 -36 -43 -158 -188 -314 -456 -399 -684 -31 -82 -85 -261
-94 -306 -2 -14 -9 -48 -15 -76 -19 -95 -18 -88 -36 -269 -12 -121 -6 -413 11
-505 3 -14 7 -42 10 -62 14 -93 19 -117 37 -188 11 -41 22 -83 24 -93 17 -73
92 -270 148 -387 228 -480 596 -855 1069 -1091 83 -42 135 -66 158 -74 3 -1
14 -5 25 -10 57 -24 122 -47 136 -50 9 -2 38 -11 65 -20 56 -19 245 -61 319
-71 28 -3 58 -8 68 -10 139 -26 479 -20 667 11 14 3 40 7 59 10 18 3 52 10 75
16 22 6 50 13 61 15 44 8 112 27 142 40 17 8 37 14 43 14 7 0 54 16 104 36
196 79 367 173 548 302 l48 34 -62 81 c-34 45 -66 83 -70 85 -4 2 -8 8 -8 12
0 11 -139 194 -150 198 -7 3 -69 -39 -117 -78 -7 -6 -15 -10 -19 -10 -4 0 -15
-6 -23 -14 -30 -27 -318 -168 -351 -171 -3 -1 -34 -10 -70 -22 -120 -40 -205
-58 -379 -79 -112 -14 -364 -8 -486 12 -16 2 -39 6 -50 8 -11 2 -33 6 -50 10
-16 3 -39 8 -50 10 -11 2 -40 10 -65 17 -25 7 -51 13 -57 15 -15 3 -144 51
-193 73 -19 8 -37 15 -40 16 -14 3 -143 73 -200 108 -349 217 -605 522 -773
922 -40 94 -86 264 -112 410 -30 173 -23 472 16 665 102 507 408 951 851 1233
111 70 359 187 399 187 8 0 19 3 23 8 4 4 12 8 17 8 5 1 10 2 12 4 5 4 184 47
227 54 19 3 46 8 60 11 105 21 409 22 530 1 14 -3 43 -7 65 -11 64 -9 201 -43
240 -59 19 -8 35 -13 35 -11 0 2 44 -14 97 -36 125 -51 266 -126 372 -199 l85
-58 104 136 c138 182 144 189 169 219 l22 26 -37 30 c-20 16 -46 34 -57 39
-11 6 -22 14 -25 18 -3 3 -23 17 -45 30 -22 13 -42 26 -45 29 -10 12 -224 121
-310 159 -59 26 -283 102 -318 108 -15 3 -40 9 -57 14 -37 11 -184 37 -245 44
-146 15 -196 19 -298 20 -62 1 -114 1 -115 0z"/>
<path d="M4476 3999 c-99 -23 -173 -116 -177 -224 -5 -127 109 -240 236 -236
96 4 163 46 206 130 89 173 -72 373 -265 330z"/>
<path d="M4808 3267 c-27 -5 -48 -13 -48 -18 0 -5 -6 -9 -14 -9 -24 0 -94 -86
-106 -131 -13 -46 -9 -118 8 -160 17 -41 71 -98 116 -121 44 -23 133 -28 176
-11 14 6 28 10 32 9 14 -2 80 70 100 109 15 28 21 58 20 100 -1 86 -2 89 -41
141 -59 79 -147 111 -243 91z"/>
<path d="M4198 3265 c-2 -2 -19 -5 -38 -7 -197 -23 -274 -269 -127 -409 44
-43 92 -61 159 -61 114 0 206 73 229 182 28 133 -47 252 -183 288 -20 6 -38 9
-40 7z"/>
<path d="M2479 3156 c-2 -2 -21 -6 -43 -9 -21 -3 -73 -22 -115 -43 -177 -87
-284 -267 -276 -466 4 -103 7 -120 34 -187 109 -272 437 -393 703 -260 171 85
281 260 280 447 -1 143 -32 231 -122 348 -24 31 -112 99 -150 117 -47 21 -90
38 -115 44 -26 6 -191 14 -196 9z"/>
<path d="M3500 2882 c-125 -41 -194 -134 -185 -251 15 -199 255 -293 400 -156
91 86 99 212 20 327 -17 24 -78 65 -110 73 -38 10 -105 14 -125 7z"/>
<path d="M4781 2477 c-49 -16 -124 -95 -140 -147 -26 -87 -4 -175 59 -239 49
-48 96 -66 172 -65 59 0 73 5 116 33 72 50 117 132 114 209 -3 74 -66 164
-142 201 -42 20 -131 24 -179 8z"/>
<path d="M4130 2473 c-120 -44 -182 -130 -175 -244 3 -61 26 -109 72 -153 122
-118 318 -72 381 89 21 53 22 120 4 166 -16 41 -71 98 -115 121 -39 20 -137
32 -167 21z"/>
<path d="M4451 1729 c-46 -14 -127 -97 -140 -145 -46 -167 72 -320 238 -308
161 12 263 186 195 330 -20 42 -82 103 -121 119 -36 15 -128 17 -172 4z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

BIN
ui/static/tada.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,320 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Consul Web UI Style Guide</title>
<link rel="stylesheet" href="static/bootstrap.min.css">
<link rel="stylesheet" href="static/base.css">
</head>
<body>
<div class="container">
<div class="col-md-10 col-md-offset-1">
<div class="row">
<div class="col-md-12">
<h2>Consul Web UI Style Guide</h2>
<p>This is style guide for the <a href="https://www.consul.io">Consul</a> Web UI. When possible,
it's best to follow this guide modifying the UI.</p>
<p>Some reasoning behind choices:
<ul>
<li>Colors. Bright colors were chosen to allow for easy
"scanning" of information.</li>
<li>Icons will accompany most "actions", those are still
pending</li>
<li>Layout. The layout will be primarily 2 columns with the
header at the top for navigation.</li>
</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Header</h2>
<hr>
</div>
</div>
</div>
</div>
<div class="container">
<div class="col-md-12">
<div class="row">
<div class="col-md-12 col-sm-12 topbar">
<div class="col-md-1 col-sm-2">
<a href="#"><div class="top-brand"></div></a>
</div>
<div class="col-md-2 col-sm-3">
<a class="btn btn-primary" href="#">Services</a>
</div>
<div class="col-md-2 col-sm-3">
<a class="btn btn-default" href="#">Nodes</a>
</div>
<div class="col-md-2 col-sm-3">
<a class="btn btn-default" href="#">Key/Value</a>
</div>
<div class="col-md-2 col-md-offset-1 col-sm-3 col-sm-offset-0">
<a class="btn btn-warning" href="#">5 checks failing</a>
</div>
<div class="col-md-2 col-sm-3">
<a class="btn btn-dropdown btn-default" href="#">
us-east-1
<span class="caret"></span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="col-md-10 col-md-offset-1">
<div class="row">
<div class="col-md-6">
<h2>Colors</h2>
<hr>
<ul class="list-unstyled">
<li>
<div style="width: 75px; height: 75px; display:inline-block;" class="bg-pink"></div>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-light-pink"></div>
</li>
<li>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-red"></div>
</li>
<li>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-orange"></div>
</li>
<li>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-dark-green"></div>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-green"></div>
</li>
<li>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-gray"></div>
<div style="width: 75px; height: 75px; display:inline-block" class="bg-light-gray"></div>
</li>
</ul>
</div>
<div class="col-md-6">
<h2>Headings</h2>
<hr>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<p>Paragraph text. Consul makes it simple for services to
register themselves and to discover other services via a
DNS or HTTP interface. Register external services such as
SaaS providers as well.</p>
<small>Small note text, if you need to include anything extra.</small>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Panels</h2>
<hr>
<p>Panels are for displaying data in the 2nd (right) column.
They show extensive information and are flexible, but also
use the highlight colors to allow for scanning.</p>
<hr>
<div class="panel panel-danger">
<div class="panel-bar"></div>
<div class="panel-heading">
<h3 class="panel-title">
HTTP Server Accessible
<small>httpAccess</small>
<span class="panel-note">critical</span>
</h3>
</div>
<div class="panel-body">
<p>Sends an HTTP request to the HTTP routers /health endpoint.
This should return 200 OK. If it returns anything else,
the headers are dumped.</p>
<h5>OUTPUT</h5>
<pre>
HTTP/1.1 503 SERVICE UNAVAILABLE
Content-Type: text/html; charset=utf-8
Date: Sun, 20 Apr 2014 15:40:03 GMT
Server: gunicorn/0.17.4
Content-Length: 0
Connection: keep-alive
</pre>
</div>
</div>
<div class="panel panel-success">
<div class="panel-bar"></div>
<div class="panel-heading">
<h3 class="panel-title">
Mux Accessible
<small>muxAccess</small>
<span class="panel-note">passing</span>
</h3>
</div>
<div class="panel-body">
<p>Makes a TCP connection to the muxer, dumps a relevant error if the connection fails.</p>
<h5>OUTPUT</h5>
<pre>
Socket connect Successful
</pre>
</div>
</div>
<div class="panel panel-warning">
<div class="panel-bar"></div>
<div class="panel-heading">
<h3 class="panel-title">
Router Accessible
<small>routerAccess</small>
<span class="panel-note">warning</span>
</h3>
</div>
<div class="panel-body">
<p>Makes a TCP connection to the router, dumps a relevant error if the connection fails.</p>
<h5>OUTPUT</h5>
<pre>
Socket connect timed out
</pre>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h2>Loaders</h2>
<hr>
<p>Pending...</p>
</div>
<div class="col-md-6">
<h2>Icons</h2>
<hr>
<p>Pending...</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Buttons</h2>
<hr>
<a href="#" class="btn btn-default">Default button</a>
<a href="#" class="btn btn-primary">Primary button</a>
<a href="#" class="btn btn-success">Success button</a>
<a href="#" class="btn btn-warning">Warning button</a>
<a href="#" class="btn btn-danger">Danger button</a>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Lists</h2>
<hr>
<p>Lists are used primarily for the first (left) column
view. They are designed as a quick summary, with links
embedded for the top-level item as well as sub-items (
such as a list of nodes, as below).</p>
<hr>
<div class="list-group">
<div class="list-group-item">
<div class="list-bar bg-green"></div>
<h4 class="list-group-item-heading">
<a href="#" class="subtle">vagrant-cloud-http</a>
<small>vagrant-cloud-http</small>
<div class="heading-helper">
<a class="subtle" href="#">5 passing</a>
</div>
</h4>
<ul class="list-inline">
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
</ul>
</div>
<div class="list-group-item">
<div class="list-bar bg-green"></div>
<h4 class="list-group-item-heading">
<a href="#" class="subtle">vagrant-cloud-http</a>
<small>vagrant-cloud-http</small>
<div class="heading-helper">
<a class="subtle" href="#">5 passing</a>
</div>
</h4>
<ul class="list-inline">
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
</ul>
</div>
<div class="list-group-item">
<div class="list-bar bg-orange"></div>
<h4 class="list-group-item-heading">
<a href="#" class="subtle">vagrant-cloud-http</a>
<small>vagrant-cloud-http</small>
<div class="heading-helper">
<a class="subtle" href="#">1 failing</a>
</div>
</h4>
<ul class="list-inline">
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
</ul>
</div>
<div class="list-group-item">
<div class="list-bar bg-red"></div>
<h4 class="list-group-item-heading">
<a href="#" class="subtle">vagrant-cloud-http</a>
<small>vagrant-cloud-http</small>
<div class="heading-helper">
<a class="subtle" href="#">2 failing</a>
</div>
</h4>
<ul class="list-inline">
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
<li><a class="subtle" href="#">node-10-0-109</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,123 +0,0 @@
.btn {
text-transform: uppercase;
font-weight: 600;
font-size: 12px;
border-width: 2px;
color: $gray;
@include transition(background-color .2s ease-in-out);
@include transition(border-color .2s ease-in-out);
@include transition(color .2s ease-in-out);
outline: none;
outline-color: white;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-webkit-transform: translateZ(0);
&:hover {
color: darken($gray, 10%);
background-color: lighten($gray-background, 5%);
}
&:focus {
outline: none;
outline-color: white;
outline: none;
box-shadow: none;
}
&.active {
outline-color: white;
outline: none;
box-shadow: none;
}
&.btn-primary {
color: $pink-dark;
background-color: transparent;
border: 2px solid $pink;
&:hover {
background-color: $light-pink;
color: darken($pink, 10%);
}
}
&.btn-warning {
color: $orange-faded;
background-color: transparent;
border: 2px solid $orange-faded;
&:hover {
background-color: lighten($orange-faded, 29%);
color: darken($orange-faded, 10%);
}
}
&.btn-success {
color: $green-dark;
background-color: transparent;
border: 2px solid $green-dark;
&:hover {
background-color: lighten($green-faded, 24%);
color: darken($green-dark, 10%);
}
}
&.btn-danger {
color: $red;
background-color: transparent;
border: 2px solid $red;
&:hover {
background-color: lighten($red, 38%);
color: darken($red, 10%);
}
}
&.active {
color: $pink-dark;
background-color: transparent;
border: 2px solid $pink;
&:hover {
background-color: $light-pink;
color: darken($pink, 10%);
}
&.btn-noactive {
color: inherit;
background-color: inherit;
border: 2px solid #ccc;
}
}
&.btn-mini {
font-size: 10px;
padding: 8px;
}
&.btn-list {
font-size: 10px;
padding: 3px 5px 3px 5px;
margin-right: 5px;
border-radius: 3px;
}
}
.topbar {
.btn.icon {
min-width: 50px;
height: 33px;
padding: 6px 0;
svg {
height: 20px;
fill: currentColor;
}
}
}

View File

@ -1,56 +0,0 @@
.form-group {
.form-control {
@include transition(border-color .2s ease-in-out);
@include transition(box-shadow .2s ease-in-out);
@include transition(border-color .2s ease-in-out);
&.form-control-mini {
font-size: 12px;
}
}
&.valid {
.form-control {
border-color: $green-faded;
box-shadow: 0 0 5px $green-faded;
}
}
&.validate {
&.success {
.form-control {
border-color: $green-faded;
box-shadow: 0 0 5px $green-faded;
}
}
&.error {
.form-control {
border-color: $red-faded;
box-shadow: 0 0 5px $red-faded;
}
}
}
.input-group-addon {
background-color: $gray-background;
}
}
textarea.form-control {
font-family: monospace;
height: 130px;
-webkit-transform: translateZ(0);
}
.form-checkbox {
text-transform: uppercase;
font-weight: 600;
font-size: 12px;
color: $gray;
margin-left: 20px;
input {
margin-right: 5px;
}
}

View File

@ -1,126 +0,0 @@
.list-group-item {
padding: 0;
border-width: 2px;
border-bottom-width: 2px;
border-radius: 2px;
margin-bottom: 15px;
margin-top: 15px;
@include transition(background-color .3s ease-in-out);
.list-group-item-heading, .list-inline {
margin: 10px 15px 10px 15px;
padding: 0px 5px 0px 5px;
}
.list-inline {
padding-left: 0px;
color: $gray;
font-size: 13px;
}
.list-group-item-heading {
border-bottom: 2px solid #eee;
color: $gray-darker;
.heading-helper {
float: right;
font-weight: 600;
color: $gray-light;
font-size: 14px;
}
}
.list-bar {
width: 100%;
height: 20px;
}
&.list-link:hover {
cursor: pointer;
background-color: lighten($gray-background, 8%);
}
&.list-condensed-link:hover {
cursor: pointer;
background-color: lighten($gray-background, 8%);
}
&.list-condensed-link, &.list-condensed {
border-color: $gray-background;
margin-bottom: 4px;
margin-top: 4px;
height: 40px;
&.double-line {
height: 54px;
}
font-weight: 700;
.name {
font-size: 15px;
padding-top: 6px;
span {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 35%;
float: left;
display:inline-block;
padding-right: 4px;
}
small {
display: inline-block;
padding-right: 8px;
padding-top: 2px;
font-size: 12px;
color: $gray-light;
}
}
.metadata {
display: block;
font-size: 12px;
float: left;
color: $gray-light;
}
ul.sub {
li {
padding: 0;
}
margin: 0;
font-size: 12px;
color: $gray-light;
overflow: auto;
&::-webkit-scrollbar {
display: none;
-webkit-appearance: none;
}
}
}
.list-bar-horizontal {
width: 20px;
float: left;
height: 100%;
margin-right: 10px;
}
&.active {
@include transition(border-color .1s linear);
border-color: $pink;
.list-bar, .list-bar-horizontal {
@include transition(background-color .1s linear);
background-color: $pink;
}
}
}

View File

@ -1,7 +0,0 @@
@mixin transition($transition) {
-webkit-transition: $transition;
-moz-transition: $transition;
-ms-transition: $transition;
-o-transition: $transition;
transition: $transition;
}

View File

@ -1,47 +0,0 @@
.top-brand {
margin-top: 20px;
background: transparent url('consul-logo.png') 0 no-repeat;
background-size: 30px 30px;
width: 30px;
height: 30px;
}
.topbar {
padding: 30px;
padding-top: 10px;
padding-bottom: 10px;
margin-bottom: 20px;
min-height: 95px;
border-bottom: 1px #eee solid;
.btn {
margin-top: 20px;
min-width: 100px;
}
.btn-dropdown {
width: auto;
}
ul.dropdown-menu {
li {
a {
text-transform: uppercase;
font-weight: 600;
font-size: 12px;
color: $gray;
@include transition(background-color .1s ease-in-out);
&:hover {
color: darken($gray, 10%);
background-color: lighten($gray-background, 5%);
}
}
}
}
}

View File

@ -1,267 +0,0 @@
.ns-box {
position: fixed;
background: lighten(black, 40%);
padding: 20px;
line-height: 1.4;
z-index: 1000;
min-width: 400px;
pointer-events: none;
color: rgba(250,251,255,0.95);
font-weight: 700;
font-size: 15px;
opacity: 0.8;
}
.ns-box.ns-show {
pointer-events: auto;
}
.ns-box a {
color: inherit;
opacity: 0.7;
font-weight: 700;
}
.ns-box a:hover,
.ns-box a:focus {
opacity: 1;
}
.ns-box p {
margin: 0;
}
.ns-box.ns-show,
.ns-box.ns-visible {
pointer-events: auto;
}
.ns-close {
width: 20px;
height: 20px;
position: absolute;
right: 4px;
top: 4px;
overflow: hidden;
text-indent: 100%;
cursor: pointer;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.ns-close:hover,
.ns-close:focus {
outline: none;
}
.ns-close::before,
.ns-close::after {
content: '';
position: absolute;
width: 3px;
height: 60%;
top: 50%;
left: 50%;
background: white;
}
.ns-close:hover::before,
.ns-close:hover::after {
background: #fff;
}
.ns-close::before {
-webkit-transform: translate(-50%,-50%) rotate(45deg);
transform: translate(-50%,-50%) rotate(45deg);
}
.ns-close::after {
-webkit-transform: translate(-50%,-50%) rotate(-45deg);
transform: translate(-50%,-50%) rotate(-45deg);
}
/* Growl-style notifications */
.ns-growl {
top: 30px;
left: 30px;
max-width: 300px;
border-radius: 5px;
}
.ns-growl p {
margin: 0;
line-height: 1.3;
}
[class^="ns-effect-"].ns-growl.ns-hide,
[class*=" ns-effect-"].ns-growl.ns-hide {
-webkit-animation-direction: reverse;
animation-direction: reverse;
}
/* Slide */
.ns-effect-slide {
top: 30px;
}
.ns-effect-slide .ns-close:hover::before,
.ns-effect-slide .ns-close:hover::after {
background: #fff;
}
.ns-effect-slide.ns-show {
-webkit-animation-name: animSlideElastic;
animation-name: animSlideElastic;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
}
@-webkit-keyframes animSlideElastic {
0% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); }
1.666667% { -webkit-transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); }
3.333333% { -webkit-transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); }
5% { -webkit-transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); }
6.666667% { -webkit-transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); }
8.333333% { -webkit-transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); }
10% { -webkit-transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); }
11.666667% { -webkit-transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); }
13.333333% { -webkit-transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); }
15% { -webkit-transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); }
16.666667% { -webkit-transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); }
18.333333% { -webkit-transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); }
20% { -webkit-transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); }
21.666667% { -webkit-transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); }
23.333333% { -webkit-transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); }
25% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); }
26.666667% { -webkit-transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); }
28.333333% { -webkit-transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); }
30% { -webkit-transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); }
31.666667% { -webkit-transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); }
33.333333% { -webkit-transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); }
35% { -webkit-transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); }
36.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); }
38.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); }
40% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); }
41.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); }
43.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); }
45% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); }
46.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); }
48.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); }
50% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); }
51.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); }
53.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); }
55% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); }
56.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); }
58.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); }
60% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); }
61.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); }
63.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); }
65% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); }
66.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); }
68.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); }
70% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); }
71.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); }
73.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); }
75% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); }
76.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); }
78.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); }
80% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); }
81.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); }
83.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); }
85% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); }
86.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); }
88.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); }
90% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); }
91.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); }
93.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); }
95% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); }
96.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); }
98.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); }
100% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); }
}
@keyframes animSlideElastic {
0% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000, 0, 0, 1); }
1.666667% { -webkit-transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); transform: matrix3d(1.92933, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -739.26805, 0, 0, 1); }
3.333333% { -webkit-transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); transform: matrix3d(1.96989, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -521.82545, 0, 0, 1); }
5% { -webkit-transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); transform: matrix3d(1.70901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -349.26115, 0, 0, 1); }
6.666667% { -webkit-transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); transform: matrix3d(1.4235, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -218.3238, 0, 0, 1); }
8.333333% { -webkit-transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); transform: matrix3d(1.21065, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -123.29848, 0, 0, 1); }
10% { -webkit-transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); transform: matrix3d(1.08167, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -57.59273, 0, 0, 1); }
11.666667% { -webkit-transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); transform: matrix3d(1.0165, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -14.72371, 0, 0, 1); }
13.333333% { -webkit-transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); transform: matrix3d(0.99057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.12794, 0, 0, 1); }
15% { -webkit-transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); transform: matrix3d(0.98478, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 24.86339, 0, 0, 1); }
16.666667% { -webkit-transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); transform: matrix3d(0.98719, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.40503, 0, 0, 1); }
18.333333% { -webkit-transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); transform: matrix3d(0.9916, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 30.75275, 0, 0, 1); }
20% { -webkit-transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); transform: matrix3d(0.99541, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 28.10141, 0, 0, 1); }
21.666667% { -webkit-transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); transform: matrix3d(0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 23.98271, 0, 0, 1); }
23.333333% { -webkit-transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); transform: matrix3d(0.99936, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 19.40752, 0, 0, 1); }
25% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 14.99558, 0, 0, 1); }
26.666667% { -webkit-transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); transform: matrix3d(1.00021, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11.08575, 0, 0, 1); }
28.333333% { -webkit-transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); transform: matrix3d(1.00022, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.82507, 0, 0, 1); }
30% { -webkit-transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); transform: matrix3d(1.00016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.23737, 0, 0, 1); }
31.666667% { -webkit-transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); transform: matrix3d(1.0001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3.27389, 0, 0, 1); }
33.333333% { -webkit-transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); transform: matrix3d(1.00005, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.84893, 0, 0, 1); }
35% { -webkit-transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); transform: matrix3d(1.00002, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.86364, 0, 0, 1); }
36.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.22079, 0, 0, 1); }
38.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16687, 0, 0, 1); }
40% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.37284, 0, 0, 1); }
41.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.45594, 0, 0, 1); }
43.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.46116, 0, 0, 1); }
45% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4214, 0, 0, 1); }
46.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.35963, 0, 0, 1); }
48.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.29103, 0, 0, 1); }
50% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.22487, 0, 0, 1); }
51.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.16624, 0, 0, 1); }
53.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.11734, 0, 0, 1); }
55% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.07854, 0, 0, 1); }
56.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.04909, 0, 0, 1); }
58.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.02773, 0, 0, 1); }
60% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.01295, 0, 0, 1); }
61.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00331, 0, 0, 1); }
63.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0025, 0, 0, 1); }
65% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00559, 0, 0, 1); }
66.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00684, 0, 0, 1); }
68.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00692, 0, 0, 1); }
70% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00632, 0, 0, 1); }
71.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00539, 0, 0, 1); }
73.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00436, 0, 0, 1); }
75% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00337, 0, 0, 1); }
76.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00249, 0, 0, 1); }
78.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00176, 0, 0, 1); }
80% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00118, 0, 0, 1); }
81.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00074, 0, 0, 1); }
83.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00042, 0, 0, 1); }
85% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00019, 0, 0, 1); }
86.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.00005, 0, 0, 1); }
88.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00004, 0, 0, 1); }
90% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); }
91.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); }
93.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0001, 0, 0, 1); }
95% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00009, 0, 0, 1); }
96.666667% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00008, 0, 0, 1); }
98.333333% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.00007, 0, 0, 1); }
100% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); }
}
.ns-effect-slide.ns-hide {
-webkit-animation-name: animSlide;
animation-name: animSlide;
-webkit-animation-duration: 0.25s;
animation-duration: 0.25s;
}
@-webkit-keyframes animSlide {
0% { -webkit-transform: translate3d(-30px,0,0) translate3d(-100%,0,0); }
100% { -webkit-transform: translate3d(0,0,0); }
}
@keyframes animSlide {
0% { -webkit-transform: translate3d(-30px,0,0) translate3d(-100%,0,0); transform: translate3d(-30px,0,0) translate3d(-100%,0,0); }
100% { -webkit-transform: translate3d(0,0,0); transform: translate3d(0,0,0); }
}

View File

@ -1,131 +0,0 @@
.panel {
border-width: 2px;
border-color: $gray-background;
@include transition(background-color .3s ease-in-out);
.panel-heading {
padding: 10px 7px;
background-color: transparent;
border-width: 2px;
border-color: $gray-background;
}
h4.panel-title {
padding: 4px 10px 4px 2px;
font-size: 20px;
color: $gray-light;
color: $gray-darker;
border-radius: 3px;
opacity: 0.8;
small {
font-size: 14px;
text-transform: uppercase;
font-weight: 700;
margin-left: 5px;
padding-top: 2px;
}
.no-case {
text-transform: none;
}
.panel-note {
margin-top: 5px;
float: right;
font-weight: 600;
color: $gray-light;
font-size: 14px;
}
}
h3.panel-title {
padding: 4px 0px 4px 0px;
font-size: 20px;
color: $gray-light;
color: $gray-darker;
border-radius: 3px;
small {
font-size: 14px;
margin-left: 5px;
}
.panel-note {
margin-top: 5px;
float: right;
font-weight: 600;
color: $gray-light;
font-size: 14px;
}
}
.panel-body {
padding: 0px 7px 0px 7px;
p {
font-size: 14px;
color: $text-color;
}
h5 {
font-size: 12px;
}
h4.check {
font-size: 16px;
}
&.panel-form {
padding-bottom: 15px;
}
}
.panel-bar {
width: 100%;
height: 20px;
@include transition(background-color .1s linear);
}
&.panel-link {
border-bottom-width: 2px;
}
&.panel-list {
ul {
margin: 0;
li {
margin: 0;
border: 0;
}
}
}
.panel-bar-horizontal {
width: 20px;
float: left;
height: 50px;
margin-right: 10px;
display: block;
}
&.panel-short {
border-bottom-width: 0px;
}
&.panel-link:hover {
cursor: pointer;
background-color: lighten($gray-background, 8%);
}
&.active {
>.panel-heading {
border-color: $pink;
}
@include transition(border-color .1s linear);
border-color: $pink;
.panel-bar {
@include transition(background-color .1s linear);
background-color: $pink;
}
}
}

View File

@ -1,71 +0,0 @@
body {
-webkit-font-smoothing:antialiased;
font-size: 16px;
color: $text-color;
}
a {
color: $pink;
font-weight: 600;
@include transition(color .2s ease-in-out);
&:hover {
text-decoration: none;
color: darken($pink, 10%);
}
&.subtle {
color: inherit;
&:hover {
color: $pink;
}
}
}
code {
color: $pink-dark;
background-color: $gray-background;
}
.help-block {
font-size: 14px;
color: $gray-light;
}
small {
color: $gray;
}
h1, h2, h3, h4, h5 {
color: $gray-darker;
}
h5 {
text-transform: uppercase;
font-weight: 700;
color: $gray-light;
}
h4.breadcrumbs {
padding-bottom: 5px;
text-transform: uppercase;
a {
color: $gray-light;
}
}
pre {
background-color: $gray;
color: white;
font-weight: 700;
font-size: 12px;
}
.bold {
font-weight: 700;
}
.light {
color: $gray;
}

View File

@ -1,94 +0,0 @@
#v2-notification {
color: white;
background-color: #7c1d48;
}
#v2-notification a {
font-size: 10px;
border-width: 1px;
}
#v2-notification input,
#v2-notification input + * {
display: none;
}
#v2-notification input:checked + * {
display: block;
}
#v2-notification {
width: 100vw;
position: relative;
left: 50%;
margin-left: -50vw;
}
#v2-notification label {
cursor: pointer;
}
#v2-notification label::after {
content: '';
display: block;
width: 21px;
height: 16px;
background-position: 5px 0px;
background-repeat: no-repeat;
background-image: url('data:image/svg+xml;charset=UTF-8,<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.894 9.956l-4.125 4.125-1.031 1.031-2.101-2.101 1.03-1.031 4.126-4.125-4.086-4.086-1.051-1.05L2.718.655l1.051 1.05 4.086 4.087 4.125-4.125L13.01.637l2.102 2.1-1.031 1.032-4.125 4.125 4.086 4.086 1.05 1.05-2.062 2.063-1.05-1.05-4.086-4.087z" fill="%23FFF" fill-rule="evenodd"/></svg>');
}
#v2-notification .col-md-12 > div {
padding: 15px;
}
#v2-notification p {
font-size: 15px;
font-weight: 500;
margin-left: 15px;
margin-right: 9px;
}
#v2-notification a {
min-width: 95px;
}
@media (min-width: 768px) {
#v2-notification .row > div:nth-child(2) {
padding-left: 10px;
}
#v2-notification a {
max-width: 106px;
}
#v2-notification .col-md-12 > div::before {
content: '';
display: block;
position: absolute;
width: 30px;
height: 30px;
top: 50%;
margin-top: -20px;
margin-left: -13px;
background-image: url('tada.png');
}
}
@media (max-width: 767px) {
#v2-notification .row > div {
width: 100%;
margin-left: 0;
text-align: center;
padding: 0;
}
#v2-notification a {
width: 100%;
}
#v2-notification a {
margin: 0 auto;
}
}
@media (max-width: 991px) {
#v2-notification p span {
display: none;
}
#v2-notification .row > div:last-child {
position: absolute;
top: 15px;
right: 0;
}
#v2-notification label {
position: absolute;
top: 0;
right: 15px;
}
}

View File

@ -1,28 +0,0 @@
// Colors
$gray-light: lighten(gray, 50%);
$black: #242424;
$gray-darker: #555;
$gray: #777;
$gray-light: #939393;
$gray-background: #E6E6E6;
$red: #dd4e58;
$red-dark: #c5454e;
$red-darker: #b03c44;
$tan: #f0f0e5;
$consul-gray: #909090;
$consul-footer-gray: #d7d4d7;
$pink-dark: #d62783;
$pink: lighten($pink-dark, 20%);
$light-pink: #f9f3f7;
$purple-dark: #69499a;
$purple: lighten($purple-dark, 20%);
$light-purple: #f7f3f9;
$green-faded: #BBF085;
$green-dark: #86B457;
$red-faded: $red;
$white-faded: darken(white, 2%);
$orange-faded: #FFAC5E;
// Type
$text-color: #555;

View File

@ -1,189 +0,0 @@
@import "mixins";
@import "variables";
@import "type";
@import "panels";
@import "nav";
@import "buttons";
@import "lists";
@import "forms";
@import "notifications";
@import "v2-notification";
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important; /* This line and the next line are not necessary unless you need IE6 support */
height: 100%;
margin: 0 auto -60px; /* the bottom margin is the negative value of the footer's height */
}
.footer, .push {
height: 60px; /* .push must be the same height as .footer */
}
@media (min-width: 1120px) { // + 30
.container {
width: 1100px;
}
}
@media (min-width: 1200px) { // + 30
.container {
width: 1200px;
}
}
@media (min-width: 1438px) { // + 38
.container {
width: 1400px;
}
}
a {
button:active {
outline: none;
}
}
.buffer-small {
height: 50px;
}
@media (min-width: 991px) {
.border-left {
border-left: 1px $gray-background solid;
.padded-border{
padding-left: 30px;
}
}
}
.padded-right-middle {
padding-right: 30px;
}
.no-margin {
margin: 0;
}
.vertical-center {
margin-top: 200px;
}
.sticky-scroll {
top: 15px;
position: sticky;
position: -webkit-sticky;
overflow: scroll;
}
.row {
&.colored {
background-color: $light-pink;
}
}
.bordered {
border-left: 2px solid $gray-background;
}
.bg-pink {
background-color: $pink;
}
.bg-light-pink {
background-color: $light-pink;
}
.bg-orange {
background-color: $orange-faded;
}
.bg-green {
background-color: $green-faded;
}
.bg-dark-green {
background-color: $green-dark;
}
.bg-red {
background-color: $red-faded;
}
.bg-gray {
background-color: $gray-light;
}
.bg-light-gray {
background-color: $gray-background;
}
.action-bar {
min-height: 50px;
padding-top: 10px;
padding-bottom: 10px;
}
.ember-list-view {
overflow: auto;
position: relative;
margin-bottom: 30px;
}
.ember-list-item-view {
position: absolute;
width: 100%;
}
.scrollable {
overflow: auto;
height: 800px;
margin-bottom: 30px;
}
.elip-overflow {
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.do-logo {
opacity: 0.6;
margin-top: -3px;
}
.tomography .background {
fill: $gray-background;
}
.tomography .axis {
fill: none;
stroke: $gray-light;
stroke-dasharray: 4 4;
}
.tomography .border {
fill: none;
stroke: $gray-darker;
}
.tomography .point {
stroke: $gray-darker;
fill: $green-faded;
}
.tomography .lines line {
stroke: $red;
}
.tomography .lines line:hover {
stroke: $gray-darker;
stroke-width: 2px;
}
.tomography .tick line {
stroke: $gray-light;
}
.tomography .tick text {
font-size: 14px;
text-anchor: start;
}

View File

@ -1,14 +0,0 @@
#ember-testing-container {
position: absolute;
bottom: 0;
right: 0;
width: 640px;
height: 384px;
overflow: auto;
z-index: 9999;
border: 1px solid #ccc;
background: white;
}
#ember-testing {
zoom: 50%;
}

View File

@ -1,13 +0,0 @@
if (window.location.search.indexOf("?test") !== -1) {
document.write(
'<div id="qunit"></div>' +
'<div id="qunit-fixture"></div>' +
'<div id="ember-testing-container">' +
' <div id="ember-testing"></div>' +
'</div>' +
'<link rel="stylesheet" href="tests/runner.css">' +
'<link rel="stylesheet" href="tests/vendor/qunit-1.12.0.css">' +
'<script src="tests/vendor/qunit-1.12.0.js"></script>' +
'<script src="tests/tests.js"></script>'
)
}

View File

@ -1,113 +0,0 @@
// in order to see the app running inside the QUnit runner
App.rootElement = '#ember-testing';
// Common test setup
App.setupForTesting();
App.injectTestHelpers();
// Test "fixtures". We populate these based on the running consul
// on the machine where you run the tests.
var fixtures = {
dc: "dc1",
node: null,
service: null,
key: "fake",
value: "foobar"
}
module("Integration tests", {
setup: function() {
// before each test, ensure the application is ready to run.
Ember.run(App, App.advanceReadiness);
// Discover the service, node and dc info
Ember.$.getJSON('/v1/catalog/datacenters').then(function(data) {
fixtures.dc = data[0]
}).then(function(){
Ember.$.getJSON('/v1/internal/ui/nodes?dc=' + fixtures.dc).then(function(data) {
fixtures.node = data[0].Node
});
}).then(function(){
Ember.$.getJSON('/v1/internal/ui/services?dc=' + fixtures.dc).then(function(data) {
fixtures.service = data[0].Name
});
});
// Create a fake key
Ember.$.ajax({
url: ("/v1/kv/" + fixtures.key + '?dc=' + fixtures.dc),
type: 'PUT',
data: fixtures.value
})
},
teardown: function() {
// reset the application state between each test
App.reset();
}
});
test("services", function() {
visit("/")
andThen(function() {
ok(find("a:contains('Services')").hasClass('active'), "highlights services in nav");
equal(find(".ember-list-item-view").length, 1, "renders one service");
ok(find(".ember-list-item-view .name:contains('"+ fixtures.service +"')"), "uses service name");
ok(find(".ember-list-item-view .name:contains('passing')"), "shows passing check num");
});
});
test("servicesShow", function() {
visit("/");
// First item in list
click('.ember-list-item-view .list-group-item');
andThen(function() {
ok(find("a:contains('Services')").hasClass('active'), "highlights services in nav");
equal(find(".ember-list-item-view").length, 1, "renders one service");
ok(find(".ember-list-item-view .list-group-item").hasClass('active'), "highlights active service");
ok(find(".ember-list-item-view .name:contains('"+ fixtures.service +"')"), "uses service name");
ok(find(".ember-list-item-view .name:contains('passing')"), "shows passing check num");
ok(find("h3:contains('"+ fixtures.service+"')"), "shows service name");
equal(find("h5").text(), "Nodes", "shows node list");
ok(find("h3.panel-title:contains('"+ fixtures.node +"')"), "shows node name");
});
});
test("nodes", function() {
visit("/");
click("a:contains('Nodes')");
andThen(function() {
ok(find("a:contains('Nodes')").hasClass('active'), "highlights nodes in nav");
equal(find(".ember-list-item-view").length, 1, "renders one node");
ok(find(".ember-list-item-view .name:contains('"+ fixtures.node +"')"), "contains node name");
ok(find(".ember-list-item-view .name:contains('services')"), "contains services num");
});
});
test("nodesShow", function() {
visit("/");
click("a:contains('Nodes')");
// First item in list
click('.ember-list-item-view .list-group-item');
andThen(function() {
ok(find("a:contains('Nodes')").hasClass('active'), "highlights services in nav");
equal(find(".ember-list-item-view").length, 1, "renders one service");
ok(find(".ember-list-item-view .list-group-item").hasClass('active'), "highlights active node");
ok(find(".ember-list-item-view .name:contains('"+ fixtures.node +"')"), "uses node name");
ok(find(".ember-list-item-view .name:contains('passing')"), "shows passing check num");
});
});
test("kv", function() {
visit("/");
click("a:contains('Key/Value')");
andThen(function() {
ok(find("a:contains('Key/Value')").hasClass('active'), "highlights kv in nav");
equal(find(".list-group-item").length, 1, "renders one key");
ok(find(".list-group-item:contains('"+ fixtures.key +"')"), "contains key name");
});
});

View File

@ -1,244 +0,0 @@
/**
* QUnit v1.12.0 - A JavaScript Unit Testing Framework
*
* http://qunitjs.com
*
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-top-right-radius: 5px;
-webkit-border-top-left-radius: 5px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-testrunner-toolbar label {
display: inline-block;
padding: 0 .5em 0 .1em;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
overflow: hidden;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
#qunit-modulefilter-container {
float: right;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests li .runtime {
float: right;
font-size: smaller;
}
.qunit-assert-list {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.qunit-collapsed {
display: none;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
padding: 5px;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #3c510c;
background-color: #fff;
border-left: 10px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 10px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
#qunit-testresult .module-name {
font-weight: bold;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
width: 1000px;
height: 1000px;
}

File diff suppressed because it is too large Load Diff

View File

@ -27,14 +27,6 @@ By default this is `http://localhost:8500/ui`.
You can view a live demo of the Consul Web UI
[here](http://demo.consul.io).
## How to Use the Legacy UI
As of Consul version 1.2.0 the original Consul UI is deprecated. You can
still enable it by setting the environment variable `CONSUL_UI_LEGACY` to `true`.
Without this environment variable, the web UI will default to the latest version.
To use the latest UI version, either set `CONSUL_UI_LEGACY` to false or don't
include that environment variable at all.
## Next Steps
This concludes our Getting Started guide. See the